cfq: improve fsync performance for small files
authorCorrado Zoccolo <czoccolo@gmail.com>
Mon, 20 Sep 2010 13:24:50 +0000 (15:24 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Mon, 20 Sep 2010 13:24:50 +0000 (15:24 +0200)
commit749ef9f8423054e326f3a246327ed2db4b6d395f
tree388df763e4e731f5d9b4d8dcaedca641521571e3
parent6d0aed7a38d06284db2a0e46c0a072b0c1c3299b
cfq: improve fsync performance for small files

Fsync performance for small files achieved by cfq on high-end disks is
lower than what deadline can achieve, due to idling introduced between
the sync write happening in process context and the journal commit.

Moreover, when competing with a sequential reader, a process writing
small files and fsync-ing them is starved.

This patch fixes the two problems by:
- marking journal commits as WRITE_SYNC, so that they get the REQ_NOIDLE
  flag set,
- force all queues that have REQ_NOIDLE requests to be put in the noidle
  tree.

Having the queue associated to the fsync-ing process and the one associated
 to journal commits in the noidle tree allows:
- switching between them without idling,
- fairness vs. competing idling queues, since they will be serviced only
  after the noidle tree expires its slice.

Acked-by: Vivek Goyal <vgoyal@redhat.com>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
Tested-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Corrado Zoccolo <czoccolo@gmail.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/cfq-iosched.c
fs/jbd/commit.c
fs/jbd2/commit.c