xfs
[Top] [All Lists]

Re: [patch] Use BIO_META tags for metadata rather than BIO_SYNC

To: David Chinner <dgc@xxxxxxx>
Subject: Re: [patch] Use BIO_META tags for metadata rather than BIO_SYNC
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Tue, 22 Jul 2008 22:49:31 -0500
Cc: xfs-dev <xfs-dev@xxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
In-reply-to: <20080121041826.GB155259@xxxxxxx>
References: <20080121041826.GB155259@xxxxxxx>
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Thunderbird 2.0.0.14 (Macintosh/20080421)
David Chinner wrote:
> Improve metadata I/O merging in the elevator
> 
> Change all async metadata buffers to use [READ|WRITE]_META I/O types
> so that the I/O doesn't get issued immediately. This allows merging
> of adjacent metadata requests but still prioritises them over bulk
> data. This shows a 10-15% improvement in sequential create speed of
> small files.

That sounds awesome.  I'll test it on a similar workload I've been
playing with.  Lachlan reviewed this, I think - any plans to add it?

I'll run my test & post results.

Thanks,
-Eric

> Don't include the log buffers in this classification - leave them
> as sync types so they are issued immediately.
> 
> Signed-off-by: Dave Chinner <dgc@xxxxxxx>
> ---
>  fs/xfs/linux-2.6/xfs_buf.c |    6 +++++-
>  include/linux/fs.h         |    1 +
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_buf.c
> ===================================================================
> --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_buf.c     2007-12-19 
> 11:56:47.977477993 +1100
> +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_buf.c  2007-12-19 11:56:52.200932303 
> +1100
> @@ -1136,10 +1136,14 @@ _xfs_buf_ioapply(
>       if (bp->b_flags & XBF_ORDERED) {
>               ASSERT(!(bp->b_flags & XBF_READ));
>               rw = WRITE_BARRIER;
> -     } else if (bp->b_flags & _XBF_RUN_QUEUES) {
> +     } else if (bp->b_flags & XBF_LOG_BUFFER) {
>               ASSERT(!(bp->b_flags & XBF_READ_AHEAD));
>               bp->b_flags &= ~_XBF_RUN_QUEUES;
>               rw = (bp->b_flags & XBF_WRITE) ? WRITE_SYNC : READ_SYNC;
> +     } 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_META : READ_META;
>       } else {
>               rw = (bp->b_flags & XBF_WRITE) ? WRITE :
>                    (bp->b_flags & XBF_READ_AHEAD) ? READA : READ;
> Index: 2.6.x-xfs-new/include/linux/fs.h
> ===================================================================
> --- 2.6.x-xfs-new.orig/include/linux/fs.h     2007-12-19 01:11:16.495229881 
> +1100
> +++ 2.6.x-xfs-new/include/linux/fs.h  2007-12-19 11:56:52.352912667 +1100
> @@ -83,6 +83,7 @@ extern int dir_notify_enable;
>  #define READ_SYNC    (READ | (1 << BIO_RW_SYNC))
>  #define READ_META    (READ | (1 << BIO_RW_META))
>  #define WRITE_SYNC   (WRITE | (1 << BIO_RW_SYNC))
> +#define WRITE_META   (WRITE | (1 << BIO_RW_META))
>  #define WRITE_BARRIER        ((1 << BIO_RW) | (1 << BIO_RW_BARRIER))
>  
>  #define SEL_IN               1
> 
> 


<Prev in Thread] Current Thread [Next in Thread>
  • Re: [patch] Use BIO_META tags for metadata rather than BIO_SYNC, Eric Sandeen <=