mbox series

[RFC,v5,00/11] blk-mq/scsi: Provide hostwide shared tags for SCSI HBAs

Message ID 20191202153914.84722-1-hare@suse.de (mailing list archive)
Headers show
Series blk-mq/scsi: Provide hostwide shared tags for SCSI HBAs | expand

Message

Hannes Reinecke Dec. 2, 2019, 3:39 p.m. UTC
Hi all,

here now is an updated version of the v2 patchset from John Garry,
including the suggestions and reviews from the mailing list.
John, apologies for hijacking your work :-)

For this version I've only added some slight modifications to Johns
original patch (renaming variables etc); the contentious separate sbitmap
allocation has been dropped in favour of Johns original version with pointers
to the embedded sbitmap.

But more importantly I've reworked the scheduler tag allocation after
discussions with Ming Lei.

Point is, hostwide shared tags can't really be resized; they surely
cannot be increased (as it's a hardware limitation), and even decreasing
is questionable as any modification here would affect all devices
served by this HBA.

Scheduler tags, OTOH, can be considered as per-queue, as the I/O scheduler
might want to look at all requests on all queues. As such the queue depth
is distinct from the actual queue depth of the tagset.
Seeing that it is distinct the depth can now be changed independently of
the underlying tagset, and there's no need ever to change the tagset itself.

I've also modified megaraid_sas, smartpqi and hpsa to take advantage of
host_tags.

Performance for megaraid_sas is on par with the original implementation,
with the added benefit that with this we should be able to handle cpu
hotplug properly.

Differences to v4:
- Rework scheduler tag allocations
- Revert back to the original implementation from John

Differences to v3:
- Include reviews from Ming Lei

Differences to v2:
- Drop embedded tag bitmaps
- Do not share scheduling tags
- Add patches for hpsa and smartpqi

Differences to v1:
- Use a shared sbitmap, and not a separate shared tags (a big change!)
	- Drop request.shared_tag
- Add RB tags

Hannes Reinecke (7):
  blk-mq: rename blk_mq_update_tag_set_depth()
  blk-mq: add WARN_ON in blk_mq_free_rqs()
  blk-mq: move shared sbitmap into elevator queue
  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 (3):
  blk-mq: Remove some unused function arguments
  blk-mq: Facilitate a shared sbitmap per tagset
  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-mq-debugfs.c                      |  12 +--
 block/blk-mq-sched.c                        |  22 +++++
 block/blk-mq-tag.c                          | 140 +++++++++++++++++++++-------
 block/blk-mq-tag.h                          |  27 ++++--
 block/blk-mq.c                              | 104 +++++++++++++++------
 block/blk-mq.h                              |   7 +-
 block/blk-sysfs.c                           |   7 ++
 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      |  86 +++++++----------
 drivers/scsi/hpsa.c                         |  44 ++-------
 drivers/scsi/hpsa.h                         |   1 -
 drivers/scsi/megaraid/megaraid_sas.h        |   1 -
 drivers/scsi/megaraid/megaraid_sas_base.c   |  65 ++++---------
 drivers/scsi/megaraid/megaraid_sas_fusion.c |  14 ++-
 drivers/scsi/scsi_lib.c                     |   2 +
 drivers/scsi/smartpqi/smartpqi_init.c       |  38 ++++++--
 include/linux/blk-mq.h                      |   7 +-
 include/linux/elevator.h                    |   3 +
 include/scsi/scsi_host.h                    |   3 +
 22 files changed, 380 insertions(+), 250 deletions(-)

Comments

John Garry Feb. 26, 2020, 11:09 a.m. UTC | #1
On 02/12/2019 15:39, Hannes Reinecke wrote:
> Hi all,
> 

JFYI, Sumit requested that we rebase this patchset for testing against 
the latest kernel - it no longer applies for 5.6-rc. I'm going to do 
that now and repost.

Thanks,
John

> here now is an updated version of the v2 patchset from John Garry,
> including the suggestions and reviews from the mailing list.
> John, apologies for hijacking your work :-)
> 
> For this version I've only added some slight modifications to Johns
> original patch (renaming variables etc); the contentious separate sbitmap
> allocation has been dropped in favour of Johns original version with pointers
> to the embedded sbitmap.
> 
> But more importantly I've reworked the scheduler tag allocation after
> discussions with Ming Lei.
> 
> Point is, hostwide shared tags can't really be resized; they surely
> cannot be increased (as it's a hardware limitation), and even decreasing
> is questionable as any modification here would affect all devices
> served by this HBA.
> 
> Scheduler tags, OTOH, can be considered as per-queue, as the I/O scheduler
> might want to look at all requests on all queues. As such the queue depth
> is distinct from the actual queue depth of the tagset.
> Seeing that it is distinct the depth can now be changed independently of
> the underlying tagset, and there's no need ever to change the tagset itself.
> 
> I've also modified megaraid_sas, smartpqi and hpsa to take advantage of
> host_tags.
> 
> Performance for megaraid_sas is on par with the original implementation,
> with the added benefit that with this we should be able to handle cpu
> hotplug properly.
> 
> Differences to v4:
> - Rework scheduler tag allocations
> - Revert back to the original implementation from John
> 
> Differences to v3:
> - Include reviews from Ming Lei
> 
> Differences to v2:
> - Drop embedded tag bitmaps
> - Do not share scheduling tags
> - Add patches for hpsa and smartpqi
> 
> Differences to v1:
> - Use a shared sbitmap, and not a separate shared tags (a big change!)
> 	- Drop request.shared_tag
> - Add RB tags
> 
> Hannes Reinecke (7):
>    blk-mq: rename blk_mq_update_tag_set_depth()
>    blk-mq: add WARN_ON in blk_mq_free_rqs()
>    blk-mq: move shared sbitmap into elevator queue
>    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 (3):
>    blk-mq: Remove some unused function arguments
>    blk-mq: Facilitate a shared sbitmap per tagset
>    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-mq-debugfs.c                      |  12 +--
>   block/blk-mq-sched.c                        |  22 +++++
>   block/blk-mq-tag.c                          | 140 +++++++++++++++++++++-------
>   block/blk-mq-tag.h                          |  27 ++++--
>   block/blk-mq.c                              | 104 +++++++++++++++------
>   block/blk-mq.h                              |   7 +-
>   block/blk-sysfs.c                           |   7 ++
>   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      |  86 +++++++----------
>   drivers/scsi/hpsa.c                         |  44 ++-------
>   drivers/scsi/hpsa.h                         |   1 -
>   drivers/scsi/megaraid/megaraid_sas.h        |   1 -
>   drivers/scsi/megaraid/megaraid_sas_base.c   |  65 ++++---------
>   drivers/scsi/megaraid/megaraid_sas_fusion.c |  14 ++-
>   drivers/scsi/scsi_lib.c                     |   2 +
>   drivers/scsi/smartpqi/smartpqi_init.c       |  38 ++++++--
>   include/linux/blk-mq.h                      |   7 +-
>   include/linux/elevator.h                    |   3 +
>   include/scsi/scsi_host.h                    |   3 +
>   22 files changed, 380 insertions(+), 250 deletions(-)
>