summaryrefslogtreecommitdiff
path: root/block/badblocks.c
diff options
context:
space:
mode:
authorJohn Garry <john.garry@huawei.com>2021-12-06 15:49:50 +0300
committerJens Axboe <axboe@kernel.dk>2021-12-06 23:18:47 +0300
commitfea9f92f1748083cb82049ed503be30c3d3a9b69 (patch)
tree9b6a3ec4a9f1bd0d812b2bdf07b8598e051aeec6 /block/badblocks.c
parentfc39f8d2d1c10ac04976b0a247865bb0cec4dd88 (diff)
downloadlinux-fea9f92f1748083cb82049ed503be30c3d3a9b69.tar.xz
blk-mq: Optimise blk_mq_queue_tag_busy_iter() for shared tags
Kashyap reports high CPU usage in blk_mq_queue_tag_busy_iter() and callees using megaraid SAS RAID card since moving to shared tags [0]. Previously, when shared tags was shared sbitmap, this function was less than optimum since we would iter through all tags for all hctx's, yet only ever match upto tagset depth number of rqs. Since the change to shared tags, things are even less efficient if we have parallel callers of blk_mq_queue_tag_busy_iter(). This is because in bt_iter() -> blk_mq_find_and_get_req() there would be more contention on accessing each request ref and tags->lock since they are now shared among all HW queues. Optimise by having separate calls to bt_for_each() for when we're using shared tags. In this case no longer pass a hctx, as it is no longer relevant, and teach bt_iter() about this. Ming suggested something along the lines of this change, apart from a different implementation. [0] https://lore.kernel.org/linux-block/e4e92abbe9d52bcba6b8cc6c91c442cc@mail.gmail.com/ Signed-off-by: John Garry <john.garry@huawei.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Ming Lei <ming.lei@redhat.com> Reported-and-tested-by: Kashyap Desai <kashyap.desai@broadcom.com> Fixes: e155b0c238b2 ("blk-mq: Use shared tags for shared sbitmap support") Link: https://lore.kernel.org/r/1638794990-137490-4-git-send-email-john.garry@huawei.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/badblocks.c')
0 files changed, 0 insertions, 0 deletions