Question: background GC on UBIFS

Richard Weinberger richard at nod.at
Thu Mar 31 01:53:34 PDT 2016


Am 31.03.2016 um 08:25 schrieb Wang Fangpeng:
> Hi, folks,
> 
> We did some performance test of writing data to a ubifs volume by dd. The block
> size of dd is 1MB.
> 
> When the volume has more than 20% free space, the speed of writing is about
> 1.4MB/s ~ 1.2MB/s.
> 
> However, when the free space is less and less, the speed decreases to about
> 83KB/s. We think the overhead is caused by GC, since GC tries to find a free
> space and move valid data to another place to get a free block.
> 
> Although we already have a kthread to collect freeable blocks, it doesn't
> touch blocks which have both valid and invalid nodes. My question is why don't
> we do such consolidation/defragmentation periodicly, so that the overhead
> could be decreased when there is not enough free space?

AFAIK UBIFS does this on demand to be friendly to the flash.
Otherwise it would move blocks around for nothing (if there is no writer).

Doing it periodically is doable but how often and when? Only when the system
is completely idle?
I'm not sure if there will be a huge performance gain. Basically you shift the
IO load to another location.

But you can give it a try. Add a new debugfs file to trigger an aggressive GC run.
Currently GC tries to produce as much space as we budget. You can change GC to
produce as much space as possible.

Thanks,
//richard



More information about the linux-mtd mailing list