JFFS2 garbage collector blocking for minutes after mount
Martin Egholm Nielsen
martin at egholm-nielsen.dk
Wed Jul 20 10:12:37 EDT 2005
>>I have a "small" NAND device (32MByte) with JFFS2 on top used as the
>>root-fs on my system. It's been working like a charm - until just now.
>>After (over)writing a relative large file (11 megs uncomp. -
>>~3-5compr.), the garbage collector (jffs2_gcd_mtd0) uses 8:45 minutes of
>>CPU time (~99%) after booting - blocking any write operations.
>>Ok, I accept that some GC'ing should be performed when going "beyond the
>>edge" - but shouldn't this be a one-time process, so the next time I
>>boot this is done with?
>>I see it everytime I reboot - without touching any files on the system...
>>I use the mtd source from 2005-03-04...
> The garbage collection thread is also responsible for building up the
> node tree for every inode after mounting, so that we know for sure which
> nodes are valid and which are obsolete.
So you think this is what consumes the time?
> On NAND flash we can't actually mark nodes as obsolete.
> We've made some significant improvements to that process since March,
> especially where inodes with large numbers of nodes are concerned. We
> used to sort all the nodes into a linked list before building the tree,
> but now we use a tree data structure for that instead -- so it's
> O(n log n) instead of O(n²) in the number of nodes.
> Artem has patches which should improve it still further -- I'm not sure
> if they are committed yet.
Sounds interesting... Artems states it'll be ready sometimes soon (a
week or so from now...)
More information about the linux-mtd