IOCache vs. block cache
Ingo Weinhold <[email protected]> Thu, 17 Jun 2010 14:51:59 +0200
| Newsgroups | gmane.os.openbeos.kernel.devel |
|---|---|
| Message-ID | <[email protected]> |
Howdy, I've been meditating a bit on how the block cache is favored over the file cache ATM. The problem is that the file cache smoothly integrates with the page allocation backend -- i.e. when there are no/too few free pages available, cached pages are recycled -- while the block cache grows unboundedly until a low resource limit is hit (pages, memory, or address space). The pages limit cannot be reached as long as there still are cached pages, so, unless memory or address space limit are hit first, as soon as all pages are used (actually or for caching) the block cache starts draining the file caches. I.e. very old cached blocks are favored over increasingly newer cached file content. I think eventually the block cache should be rewritten to be VMCache based with on-demand mapping of hot blocks, but for the time being a simpler solution would be possible: The IOCache could be extended to make it possible to lay it under the IOSchedulerSimple. This would give us a VMCache based cache close to the device. The block cache could then work with a very small, limited (!) set of unused blocks. The advantages are: * The block cache would no longer exert any memory pressure. * The real caching happens in the IOCache, which integrates smoothly with the page allocation backend. The file cache is no longer at a disadvantage. * There won't be anymore double-caching when mounting image files (file cache for the file, block cache for the FS on top of it). * Since the block cache is rather dumb ATM, there's some chance of serious performance improvements, particulary when assuming that FSs store related data close to each other. The block cache reads individual blocks, the IOCache always reads whole cache lines. So we'd automatically get pre-caching. The only disadvantage I see is the double caching for file content: The IOCache caches at device level, the file caches at file level. On the bright side, if the the file content is actually read again later, the cached pages in the IOCache will eventually be recycled, while the file cache pages will prevail. Writes to the file will refresh the IOCache pages as well, though. OTOH less aggressive caching in the file cache (e.g. detect contiguous reads/writes and drop older pages early) would improve the situation -- incorrectly predicted future access behavior would be rather harmless. I haven't looked into the USB mass storage situation yet. There might be additional advantages or disadvantages in this department. CU, Ingo ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo