[PATCH] xfs: improve metadata I/O merging in the elevator

Dave Chinner david at fromorbit.com
Sun Nov 15 21:50:19 CST 2009


On Thu, Nov 12, 2009 at 02:09:31PM -0500, Christoph Hellwig wrote:
> I had the patch below from Dave in my queue for a while, but previously
> couldn't really reproduce his numbers.  After some discussions of the
> bio types I've reteseted it again and can see constant improvements when
> using cfq on my large array box with it (5-10% for the sequential create
> workloads), but still nothing on deadline.  Given that people also want
> it for better marking in blktrace it might be time to put it in.
> 
> Comments?

Definitely should be done, but....

It looks like the patch you posted isn't quite doing what was
intended - async write buffers are being classified as WRITE, not
WRITE_META. That means we get more write combining in the elevator
(performance increase) like with WRITE_META, but don't get the
faster dispatch (latency reduction) by using the META queue to keep
the metadata writeback separate from the bulk data writeback.
That may be why deadline is not showing any improvement...

FWIW, the original patch here:

http://oss.sgi.com/archives/xfs/2008-01/msg00630.html

uses WRITE_META, but it looks like you've taken bits of this
patch:

http://oss.sgi.com/archives/xfs/2008-01/msg00653.html

and added the log buffer marking to this patch and accidentally
dropped the WRITE_META marking. i.e. this:

> +	} else if (bp->b_flags & _XBF_RUN_QUEUES) {
> +		ASSERT(!(bp->b_flags & XBF_READ_AHEAD));
> +		bp->b_flags &= ~_XBF_RUN_QUEUES;
> +		rw = (bp->b_flags & XBF_WRITE) ? WRITE : READ_META;

I think should be:

+		rw = (bp->b_flags & XBF_WRITE) ? WRITE_META : READ_META;

Cheers,

Dave.
-- 
Dave Chinner
david at fromorbit.com




More information about the xfs mailing list