• Ming Lei's avatar
    blk-mq: insert flush request to the front of dispatch queue · cc3200ea
    Ming Lei authored
    commit 01e99aec ("blk-mq: insert passthrough request into
    hctx->dispatch directly") may change to add flush request to the tail
    of dispatch by applying the 'add_head' parameter of
    blk_mq_sched_insert_request.
    
    Turns out this way causes performance regression on NCQ controller because
    flush is non-NCQ command, which can't be queued when there is any in-flight
    NCQ command. When adding flush rq to the front of hctx->dispatch, it is
    easier to introduce extra time to flush rq's latency compared with adding
    to the tail of dispatch queue because of S_SCHED_RESTART, then chance of
    flush merge is increased, and less flush requests may be issued to
    controller.
    
    So always insert flush request to the front of dispatch queue just like
    before applying commit 01e99aec ("blk-mq: insert passthrough request
    into hctx->dispatch directly").
    
    Cc: Damien Le Moal <Damien.LeMoal@wdc.com>
    Cc: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Reported-by: default avatarShinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Fixes: 01e99aec ("blk-mq: insert passthrough request into hctx->dispatch directly")
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    cc3200ea
blk-mq-sched.c 15.7 KB