• Jan Kara's avatar
    block: do not reverse request order when flushing plug list · 34e0a279
    Jan Kara authored
    Commit 26fed4ac ("block: flush plug based on hardware and software
    queue order") changed flushing of plug list to submit requests one
    device at a time. However while doing that it also started using
    list_add_tail() instead of list_add() used previously thus effectively
    submitting requests in reverse order. Also when forming a rq_list with
    remaining requests (in case two or more devices are used), we
    effectively reverse the ordering of the plug list for each device we
    process. Submitting requests in reverse order has negative impact on
    performance for rotational disks (when BFQ is not in use). We observe
    10-25% regression in random 4k write throughput, as well as ~20%
    regression in MariaDB OLTP benchmark on rotational storage on btrfs
    filesystem.
    
    Fix the problem by preserving ordering of the plug list when inserting
    requests into the queuelist as well as by appending to requeue_list
    instead of prepending to it.
    
    Fixes: 26fed4ac ("block: flush plug based on hardware and software queue order")
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20230313093002.11756-1-jack@suse.czSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    34e0a279
blk-mq.c 123 KB