On Wed, Mar 28, 2012 at 11:53:37AM +1100, Dave Chinner wrote:
> in IO patterns and performance under heavy load here with this
> patch set. it doesn't however, reduce the buffer cache lookups all
> that much on such workloads - about 10% at most - as most of the
> lookups are common from the directory and inode buffer
> modifications. Here's a sample profile:
10% might not be extremly huge, but it's pretty significant.
> This shows that 50% of the lookups from the directory code, 25% from
> the inode btree lookups, 12% from mapping inodes, and 10% from
> reading the AGI buffer during inode allocation.
> You know, I suspect that we could avoid almost all those AGI buffer
> lookups by moving to a similar in-core log and flush technique that
> the inodes use. We've already got all the information in the struct
> xfs_perag - rearranging it to have a "in-core on disk" structures
> for the AGI, AGF and AGFL would make a lot of the "select an AG"
> code much simpler than having to read and modify the AG buffers
> directly. It might even be possible to do such a change without
> needing to change the on-disk journal format for them...
> I think I'll put that on my list of stuff to do - right next to
> in-core unlinked inode lists....
Sounds fine. A simple short-term fix might be to simply pin a reference
to the AGI buffers and add a pointer from struct xfs_perag to them.