From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 2/4] gfs2: ordered writes are backwards
Date: Fri, 05 Feb 2010 10:02:15 +0000 [thread overview]
Message-ID: <1265364135.2524.5.camel@localhost> (raw)
In-Reply-To: <1265348727-19347-3-git-send-email-dchinner@redhat.com>
Hi,
This looks good. There is an argument for trying to sort the buffers as
we write them (in case the application writes them out of order) but
this seems a sensible change to catch 90% of cases. I'm just about to
give this a quick test and I'll push this one in straight away if it
looks good on my test,
Steve.
On Fri, 2010-02-05 at 16:45 +1100, Dave Chinner wrote:
> When we queue data buffers for ordered write, the buffers are added
> to the head of the ordered write list. When the log needs to push
> these buffers to disk, it also walks the list from the head. The
> result is that the the ordered buffers are submitted to disk in
> reverse order.
>
> For large writes, this means that whenever the log flushes large
> streams of reverse sequential order buffers are pushed down into the
> block layers. The elevators don't handle this particularly well, so
> IO rates tend to be significantly lower than if the IO was issued in
> ascending block order.
>
> Queue new ordered buffers to the tail of the ordered buffer list to
> ensure that IO is dispatched in the order it was submitted. This
> should significantly improve large sequential write speeds. On a
> disk capable of 85MB/s, speeds increase from 50MB/s to 65MB/s for
> noop and from 38MB/s to 50MB/s for cfq.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
> fs/gfs2/lops.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
> index 5708edf..7278cf0 100644
> --- a/fs/gfs2/lops.c
> +++ b/fs/gfs2/lops.c
> @@ -532,9 +532,9 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
> gfs2_pin(sdp, bd->bd_bh);
> tr->tr_num_databuf_new++;
> sdp->sd_log_num_databuf++;
> - list_add(&le->le_list, &sdp->sd_log_le_databuf);
> + list_add_tail(&le->le_list, &sdp->sd_log_le_databuf);
> } else {
> - list_add(&le->le_list, &sdp->sd_log_le_ordered);
> + list_add_tail(&le->le_list, &sdp->sd_log_le_ordered);
> }
> out:
> gfs2_log_unlock(sdp);
next prev parent reply other threads:[~2010-02-05 10:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-05 5:45 [Cluster-devel] (no subject) Dave Chinner
2010-02-05 5:45 ` [Cluster-devel] [PATCH 1/4] gfs2: add IO submission trace points Dave Chinner
2010-02-05 9:49 ` Steven Whitehouse
2010-02-05 9:48 ` Christoph Hellwig
2010-02-05 5:45 ` [Cluster-devel] [PATCH 2/4] gfs2: ordered writes are backwards Dave Chinner
2010-02-05 10:02 ` Steven Whitehouse [this message]
2010-02-05 10:34 ` Dave Chinner
2010-02-05 5:45 ` [Cluster-devel] [PATCH 3/4] gfs2: ordered buffer writes are not sync Dave Chinner
2010-02-05 10:58 ` Steven Whitehouse
2010-02-05 5:45 ` [Cluster-devel] [PATCH 4/4] gfs2: introduce AIL lock Dave Chinner
2010-02-05 11:11 ` Steven Whitehouse
2010-02-06 2:34 ` Dave Chinner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1265364135.2524.5.camel@localhost \
--to=swhiteho@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.