Use _META bio I/O types for metadata I/O
Subsystems (2)
PATCH 3/9 Use _META bio I/O types for metadata I/O
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.
Don't include the log buffers in this classification - leave them as sync types so they are issued immediately.
--- fs/xfs/linux-2.6/xfs_buf.c | 6 +++++- include/linux/fs.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-)
fs/xfs/linux-2.6/xfs_buf.c +5 -1
@@ -1175,10 +1175,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 ;
include/linux/fs.h +1 -0
@@ -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
Quoted 10 lines · David Chinner
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.
Don't include the log buffers in this classification - leave them as sync types so they are issued immediately.
Looks good, and just including the trivial fs.h addition here might be okay aswell.