xfs
[Top] [All Lists]

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

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH] xfs: improve metadata I/O merging in the elevator
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Mon, 16 Nov 2009 14:50:19 +1100
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20091112190930.GB32110@xxxxxxxxxxxxx>
References: <20091112190930.GB32110@xxxxxxxxxxxxx>
User-agent: Mutt/1.5.18 (2008-05-17)
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@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>