On Thu, Mar 29, 2012 at 11:52:24AM +1100, Dave Chinner wrote:
> I suspect that this can be done without much API churn, and it would
> remove the central per-AG buffer cache lookups for most operations.
> Smaller caches means less lookup overhead for most operations - with
> 10-11% of CPU time being spent in lookups on an 8p machine, that's
> almost an entire CPU worth of time being used. Hence reducing the
> rbtree lookup and modification overhead should be a significant win.
> Crazy idea, yes, but I'm going to think about it some more,
> especially as the shrinker operates of the LRU and is entirely
> independent of the rbtree indexing.....
Sounds like a good idea to me. I think the biggest win will be to index
the directory blocks logically, e.g. have a tree hanging off the inode
to find them. The other worthwhile optimizations besides avoiding AGI buffer
lookups during inode scanning would be to do something more about inode
buffers - probably a tree that maps directly from inode number to the
I'd probably add the secondary tree linkage directly to the buffer to
keep things simpler. In fact I'm not even sure we need a secondary
linkage - at least from a quick look I can't see why we'd need to keep
buffers on the physically indexed per-ag rbtree if we can find them by