• Ming Lei's avatar
    blk-mq: don't handle TAG_SHARED in restart · 358a3a6b
    Ming Lei authored
    Now restart is used in the following cases, and TAG_SHARED is for
    SCSI only.
    
    1) .get_budget() returns BLK_STS_RESOURCE
    - if resource in target/host level isn't satisfied, this SCSI device
    will be added in shost->starved_list, and the whole queue will be rerun
    (via SCSI's built-in RESTART) in scsi_end_request() after any request
    initiated from this host/targe is completed. Forget to mention, host level
    resource can't be an issue for blk-mq at all.
    
    - the same is true if resource in the queue level isn't satisfied.
    
    - if there isn't outstanding request on this queue, then SCSI's RESTART
    can't work(blk-mq's can't work too), and the queue will be run after
    SCSI_QUEUE_DELAY, and finally all starved sdevs will be handled by SCSI's
    RESTART when this request is finished
    
    2) scsi_dispatch_cmd() returns BLK_STS_RESOURCE
    - if there isn't onprogressing request on this queue, the queue
    will be run after SCSI_QUEUE_DELAY
    
    - otherwise, SCSI's RESTART covers the rerun.
    
    3) blk_mq_get_driver_tag() failed
    - BLK_MQ_S_TAG_WAITING covers the cross-queue RESTART for driver
    allocation.
    
    In one word, SCSI's built-in RESTART is enough to cover the queue
    rerun, and we don't need to pay special attention to TAG_SHARED wrt. restart.
    
    In my test on scsi_debug(8 luns), this patch improves IOPS by 20% ~ 30% when
    running I/O on these 8 luns concurrently.
    
    Aslo Roman Pen reported the current RESTART is very expensive especialy
    when there are lots of LUNs attached in one host, such as in his
    test, RESTART causes half of IOPS be cut.
    
    Fixes: https://marc.info/?l=linux-kernel&m=150832216727524&w=2
    Fixes: 6d8c6c0f ("blk-mq: Restart a single queue if tag sets are shared")
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    358a3a6b
blk-mq-sched.c 14.9 KB