[PATCH RFC v7 00/12] blk-mq/scsi: Provide hostwide shared tags for SCSI HBAs

John Garry
2020-06-10T17:33:31Z

Hi all,

Here is v7 of the patchset.

In this version of the series, we keep the shared sbitmap for driver tags,
and introduce changes to fix up the tag budgeting across request queues (
and associated debugfs changes).

Some performance figures:

Using 12x SAS SSDs on hisi_sas v3 hw. mq-deadline results are included,
but it is not always an appropriate scheduler to use.

Tag depth 4000 (default) 260**

Baseline:
none sched: 2290K IOPS 894K
mq-deadline sched: 2341K IOPS 2313K

Final, host_tagset=0 in LLDD*
none sched: 2289K IOPS 703K
mq-deadline sched: 2337K IOPS 2291K

Final:
none sched: 2281K IOPS 1101K
mq-deadline sched: 2322K IOPS 1278K

* this is relevant as this is the performance in supporting but not
enabling the feature
** depth=260 is relevant as some point where we are regularly waiting for
tags to be available. Figures were are a bit unstable here for testing.

A copy of the patches can be found here:
https://github.com/hisilicon/kernel-dev/commits/private-topic-blk-mq-shared-tags-rfc-v7

And to progress this series, we the the following to go in first, when ready:
https://lore.kernel.org/linux-scsi/20200430131904.5847-1-hare@suse.de/

Comments welcome, thanks!

Differences to v6:
- tag budgeting across request queues and associated changes
- add any reviewed tags
- rebase
- I did not include any change related to updating shared sbitmap per-hctx
wait pointer, based on lack of evidence of performance improvement. This
was discussed here originally:
https://lore.kernel.org/linux-scsi/ecaeccf029c6fe377ebd4f30f04df9f1@mail.gmail.com/
I may revisit.

Differences to v5:
- For now, drop the shared scheduler tags
- Fix megaraid SAS queue selection and rebase
- Omit minor unused arguments patch, which has now been merged
- Add separate patch to introduce sbitmap pointer
- Fixed hctx_tags_bitmap_show() for shared sbitmap
- Various tidying

Hannes Reinecke (5):
blk-mq: rename blk_mq_update_tag_set_depth()
scsi: Add template flag 'host_tagset'
megaraid_sas: switch fusion adapters to MQ
smartpqi: enable host tagset
hpsa: enable host_tagset and switch to MQ

John Garry (6):
blk-mq: Use pointers for blk_mq_tags bitmap tags
blk-mq: Facilitate a shared sbitmap per tagset
blk-mq: Record nr_active_requests per queue for when using shared
sbitmap
blk-mq: Record active_queues_shared_sbitmap per tag_set for when using
shared sbitmap
blk-mq: Add support in hctx_tags_bitmap_show() for a shared sbitmap
scsi: hisi_sas: Switch v3 hw to MQ

Ming Lei (1):
blk-mq: rename BLK_MQ_F_TAG_SHARED as BLK_MQ_F_TAG_QUEUE_SHARED

block/bfq-iosched.c | 4 +-
block/blk-core.c | 2 +
block/blk-mq-debugfs.c | 120 ++++++++++++++-
block/blk-mq-tag.c | 157 ++++++++++++++------
block/blk-mq-tag.h | 21 ++-
block/blk-mq.c | 64 +++++---
block/blk-mq.h | 33 +++-
block/kyber-iosched.c | 4 +-
drivers/scsi/hisi_sas/hisi_sas.h | 3 +-
drivers/scsi/hisi_sas/hisi_sas_main.c | 36 ++---
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 87 +++++------
drivers/scsi/hpsa.c | 44 +-----
drivers/scsi/hpsa.h | 1 -
drivers/scsi/megaraid/megaraid_sas.h | 1 -
drivers/scsi/megaraid/megaraid_sas_base.c | 59 +++-----
drivers/scsi/megaraid/megaraid_sas_fusion.c | 24 +--
drivers/scsi/scsi_lib.c | 2 +
drivers/scsi/smartpqi/smartpqi_init.c | 38 +++--
include/linux/blk-mq.h | 9 +-
include/linux/blkdev.h | 3 +
include/scsi/scsi_host.h | 6 +-
21 files changed, 463 insertions(+), 255 deletions(-)

--
2.26.2