From: Ming Lei <ming.lei@redhat.com>
To: Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org,
"Martin K . Petersen" <martin.petersen@oracle.com>,
linux-scsi@vger.kernel.org
Cc: Ming Lei <ming.lei@redhat.com>, Omar Sandoval <osandov@fb.com>,
Kashyap Desai <kashyap.desai@broadcom.com>,
Sumanesh Samanta <sumanesh.samanta@broadcom.com>,
"Ewan D . Milne" <emilne@redhat.com>,
Hannes Reinecke <hare@suse.de>
Subject: [PATCH V7 00/13] blk-mq/scsi: tracking device queue depth via sbitmap
Date: Fri, 22 Jan 2021 10:33:04 +0800 [thread overview]
Message-ID: <20210122023317.687987-1-ming.lei@redhat.com> (raw)
Hi,
scsi uses one global atomic variable to track queue depth for each
LUN/request queue. This way can't scale well when there is lots of CPU
cores and the disk is very fast. Broadcom guys has complained that their
high end HBA can't reach top performance because .device_busy is
operated in IO path.
Replace the atomic variable sdev->device_busy with sbitmap for
tracking scsi device queue depth.
Test on scsi_debug shows this way improve IOPS > 20%. Meantime
the IOPS difference is just ~1% compared with bypassing .device_busy
on scsi_debug via patches[1]
The 1st 6 patches moves percpu allocation hint into sbitmap, since
the improvement by doing percpu allocation hint on sbitmap is observable.
Meantime export helpers for SCSI.
Patch 7 and 8 prepares for the conversion by returning budget token
from .get_budget callback, meantime passes the budget token to driver
via 'struct blk_mq_queue_data' in .queue_rq().
The last four patches changes SCSI for switching to track device queue
depth via sbitmap.
The patchset have been tested by Broadcom, and obvious performance boost
can be observed on megaraid_sas.
V7:
- fix build failure on drivers/vhost/scsi.c, only patch 2 & 4 are
changed
V6:
- rebase on for-5.12/block
V5:
- add comment on sbitmap_weight()
- add patch 'megaraid_sas: v2 replace sdev_busy with local counter'
for fixing build failure
V4:
- limit max sdev->queue_depth as max(1024, shost->can_queue)
- simplify code for moving per-cpu allocation hint into sbitmap
V3:
- rebase on both for-5.10/block and 5.10/scsi-queue.
V2:
- fix one build failure
Kashyap Desai (1):
megaraid_sas: v2 replace sdev_busy with local counter
Ming Lei (12):
sbitmap: remove sbitmap_clear_bit_unlock
sbitmap: maintain allocation round_robin in sbitmap
sbitmap: add helpers for updating allocation hint
sbitmap: move allocation hint into sbitmap
sbitmap: export sbitmap_weight
sbitmap: add helper of sbitmap_calculate_shift
blk-mq: add callbacks for storing & retrieving budget token
blk-mq: return budget token from .get_budget callback
scsi: put hot fields of scsi_host_template into one cacheline
scsi: add scsi_device_busy() to read sdev->device_busy
scsi: make sure sdev->queue_depth is <= max(shost->can_queue, 1024)
scsi: replace sdev->device_busy with sbitmap
block/blk-mq-sched.c | 17 +-
block/blk-mq.c | 38 ++--
block/blk-mq.h | 25 ++-
block/kyber-iosched.c | 3 +-
drivers/message/fusion/mptsas.c | 2 +-
drivers/scsi/megaraid/megaraid_sas.h | 2 +
drivers/scsi/megaraid/megaraid_sas_fusion.c | 48 ++++-
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 +-
drivers/scsi/scsi.c | 13 ++
drivers/scsi/scsi_lib.c | 67 ++++---
drivers/scsi/scsi_priv.h | 3 +
drivers/scsi/scsi_scan.c | 23 ++-
drivers/scsi/scsi_sysfs.c | 4 +-
drivers/scsi/sg.c | 2 +-
drivers/vhost/scsi.c | 4 +-
include/linux/blk-mq.h | 13 +-
include/linux/sbitmap.h | 85 +++++---
include/scsi/scsi_cmnd.h | 2 +
include/scsi/scsi_device.h | 8 +-
include/scsi/scsi_host.h | 72 ++++---
lib/sbitmap.c | 210 +++++++++++---------
21 files changed, 428 insertions(+), 215 deletions(-)
Cc: Omar Sandoval <osandov@fb.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: Sumanesh Samanta <sumanesh.samanta@broadcom.com>
Cc: Ewan D. Milne <emilne@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>
--
2.28.0
next reply other threads:[~2021-01-22 2:35 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-22 2:33 Ming Lei [this message]
2021-01-22 2:33 ` [PATCH V7 01/13] sbitmap: remove sbitmap_clear_bit_unlock Ming Lei
2021-01-22 2:33 ` [PATCH V7 02/13] sbitmap: maintain allocation round_robin in sbitmap Ming Lei
2021-01-22 2:33 ` Ming Lei
2021-01-22 2:33 ` [PATCH V7 03/13] sbitmap: add helpers for updating allocation hint Ming Lei
2021-01-22 2:33 ` [PATCH V7 04/13] sbitmap: move allocation hint into sbitmap Ming Lei
2021-01-22 2:33 ` Ming Lei
2021-01-22 2:33 ` [PATCH V7 05/13] sbitmap: export sbitmap_weight Ming Lei
2021-01-22 2:33 ` [PATCH V7 06/13] sbitmap: add helper of sbitmap_calculate_shift Ming Lei
2021-01-22 2:33 ` [PATCH V7 07/13] blk-mq: add callbacks for storing & retrieving budget token Ming Lei
2021-01-22 2:33 ` [PATCH V7 08/13] blk-mq: return budget token from .get_budget callback Ming Lei
2021-01-22 2:33 ` [PATCH V7 09/13] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
2021-01-22 2:33 ` [PATCH V7 10/13] megaraid_sas: v2 replace sdev_busy with local counter Ming Lei
2021-01-22 2:33 ` [PATCH V7 11/13] scsi: add scsi_device_busy() to read sdev->device_busy Ming Lei
2021-01-22 2:33 ` [PATCH V7 12/13] scsi: make sure sdev->queue_depth is <= max(shost->can_queue, 1024) Ming Lei
2021-01-22 2:33 ` [PATCH V7 13/13] scsi: replace sdev->device_busy with sbitmap Ming Lei
2021-01-29 18:02 ` [PATCH V7 00/13] blk-mq/scsi: tracking device queue depth via sbitmap Martin K. Petersen
[not found] ` <20210131115245.GA1979183@T590>
2021-02-01 22:33 ` Martin K. Petersen
2021-02-03 11:14 ` Ming Lei
2021-02-04 2:59 ` Martin K. Petersen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210122023317.687987-1-ming.lei@redhat.com \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=emilne@redhat.com \
--cc=hare@suse.de \
--cc=kashyap.desai@broadcom.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=osandov@fb.com \
--cc=sumanesh.samanta@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.