• C
    cfq: improve fsync performance for small files · 749ef9f8
    Corrado Zoccolo 提交于
    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: NVivek Goyal <vgoyal@redhat.com>
    Reviewed-by: NJeff Moyer <jmoyer@redhat.com>
    Tested-by: NJeff Moyer <jmoyer@redhat.com>
    Signed-off-by: NCorrado Zoccolo <czoccolo@gmail.com>
    Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
    749ef9f8
commit.c 28.5 KB