JFFS2 alloc_sem contention
David Wuertele
dave+gmane at wuertele.com
Mon Mar 8 13:41:45 EST 2010
I have a 45MB JFFS2 partition that is usually about 70% full. My application
developers are sad that sometimes a small write can take up to 30 seconds.
I have increased the priority of the GC thread so that the chances of a write
having to do garbage collection are small.
I have increased the value of resv_blocks_write and resv_blocks_gctrigger so
that when GC does happen, it has enough free blocks to work with, maximizing
efficiency.
I have run KFT to discover exactly where the block is happening. Here is the
story:
1. garbage collection runs
2. a big file gets written, eg "cp /path/to/mybigfile /path/to/jffs2"
3. the big file cp enters jffs2_reserve_space and grabs the alloc_sem
4. a small file gets written, eg "cp /path/to/smallfile /path/to/jffs2"
5. the small file cp enters jffs2_reserve_space and blocks on alloc_sem
6. the big file takes up to 30s to finish writing, then releases alloc_sem
7. the small file cp completes with a huge latency
I know the pid of the process that does the small writes. I would like to give
it priority over the big writes. I would be satisfied if I could have the big
write return from sys_write having only written a part of the buffer.
I have tried to use ioprio to increase the small writer's priority, but
apparently JFFS2 does not check ioprio.
Any advice?
Thanks,
Dave
More information about the linux-mtd
mailing list