mbox series

[RFC,00/24] scsi: enable reserved commands for LLDDs

Message ID 20190529132901.27645-1-hare@suse.de (mailing list archive)
Headers show
Series scsi: enable reserved commands for LLDDs | expand

Message

Hannes Reinecke May 29, 2019, 1:28 p.m. UTC
Hi all,

quite some drivers use internal commands for various purposes, most
commonly sending TMFs or querying the HBA status.
While these commands use the same submission mechanism than normal
I/O commands, they will not be counted as outstanding commands,
requiring those drivers to implement their own mechanism to figure
out outstanding commands.
This patchset enables the use of reserved tags for the SCSI midlayer,
enabling LLDDs to rely on the block layer for tracking outstanding
commands.
More importantly, it allows LLDD to request a valid tag from the block
layer without having to implement some tracking mechanism within the
driver. This removes quite some hacks which were required for some
drivers (eg. fnic or snic).

As usual, comments and reviews are welcome.

Hannes Reinecke (24):
  block: disable elevator for reserved tags
  scsi: add scsi_{get,put}_reserved_cmd()
  scsi: add 'nr_reserved_cmds' field to the SCSI host template
  csiostor: use reserved command for LUN reset
  scsi: add scsi_cmd_from_priv()
  virtio_scsi: use reserved commands for TMF
  scsi: add host tagset busy iterator
  fnic: use reserved commands
  fnic: use scsi_host_tagset_busy_iter() to traverse commands
  scsi: allocate separate queue for reserved commands
  scsi: add scsi_host_get_reserved_cmd()
  hpsa: move hpsa_hba_inquiry after scsi_add_host()
  hpsa: use reserved commands
  hpsa: use blk_mq_tagset_busy_iter() to traverse outstanding commands
  hpsa: drop refcount field from CommandList
  snic: use reserved commands
  snic: use tagset iter for traversing commands
  scsi: Implement scsi_is_reserved_cmd()
  aacraid: move scsi_add_host()
  aacraid: use private commands
  aacraid: replace cmd_list with scsi_host_tagset_busy_iter()
  aacraid: use scsi_host_tagset_busy_iter() to traverse outstanding
    commands
  dpt_i2o: drop cmd_list usage
  scsi: drop scsi command list

 block/blk-mq.c                    |  22 +-
 drivers/scsi/aacraid/aachba.c     | 125 +++---
 drivers/scsi/aacraid/aacraid.h    |   6 +-
 drivers/scsi/aacraid/comminit.c   |  28 +-
 drivers/scsi/aacraid/commsup.c    | 134 +++---
 drivers/scsi/aacraid/linit.c      | 302 +++++++------
 drivers/scsi/csiostor/csio_init.c |   3 +-
 drivers/scsi/csiostor/csio_scsi.c |  48 +-
 drivers/scsi/dpt_i2o.c            |  23 +-
 drivers/scsi/fnic/fnic_scsi.c     | 916 ++++++++++++++++----------------------
 drivers/scsi/hosts.c              |  27 ++
 drivers/scsi/hpsa.c               | 310 ++++++-------
 drivers/scsi/hpsa.h               |   1 -
 drivers/scsi/hpsa_cmd.h           |   1 -
 drivers/scsi/scsi.c               |   1 -
 drivers/scsi/scsi_lib.c           |  69 +--
 drivers/scsi/scsi_scan.c          |   1 -
 drivers/scsi/snic/snic.h          |   2 +-
 drivers/scsi/snic/snic_main.c     |   3 +
 drivers/scsi/snic/snic_scsi.c     | 502 ++++++++++-----------
 drivers/scsi/virtio_scsi.c        | 100 ++---
 include/linux/blk-mq.h            |   2 +
 include/scsi/scsi_cmnd.h          |  12 +-
 include/scsi/scsi_device.h        |   1 -
 include/scsi/scsi_host.h          |  17 +-
 include/scsi/scsi_tcq.h           |  30 ++
 26 files changed, 1311 insertions(+), 1375 deletions(-)

Comments

John Garry Aug. 23, 2019, 1:26 p.m. UTC | #1
On 29/05/2019 14:28, Hannes Reinecke wrote:
> Hi all,
>
> quite some drivers use internal commands for various purposes, most
> commonly sending TMFs or querying the HBA status.
> While these commands use the same submission mechanism than normal
> I/O commands, they will not be counted as outstanding commands,
> requiring those drivers to implement their own mechanism to figure
> out outstanding commands.
> This patchset enables the use of reserved tags for the SCSI midlayer,
> enabling LLDDs to rely on the block layer for tracking outstanding
> commands.
> More importantly, it allows LLDD to request a valid tag from the block
> layer without having to implement some tracking mechanism within the
> driver. This removes quite some hacks which were required for some
> drivers (eg. fnic or snic).
>
> As usual, comments and reviews are welcome.
>

Hi Hannes,

I was wondering if you have any plans to progress this series?

I don't mind helping out...

Cheers,
John

> Hannes Reinecke (24):
>   block: disable elevator for reserved tags
>   scsi: add scsi_{get,put}_reserved_cmd()
>   scsi: add 'nr_reserved_cmds' field to the SCSI host template
>   csiostor: use reserved command for LUN reset
>   scsi: add scsi_cmd_from_priv()
>   virtio_scsi: use reserved commands for TMF
>   scsi: add host tagset busy iterator
>   fnic: use reserved commands
>   fnic: use scsi_host_tagset_busy_iter() to traverse commands
>   scsi: allocate separate queue for reserved commands
>   scsi: add scsi_host_get_reserved_cmd()
>   hpsa: move hpsa_hba_inquiry after scsi_add_host()
>   hpsa: use reserved commands
>   hpsa: use blk_mq_tagset_busy_iter() to traverse outstanding commands
>   hpsa: drop refcount field from CommandList
>   snic: use reserved commands
>   snic: use tagset iter for traversing commands
>   scsi: Implement scsi_is_reserved_cmd()
>   aacraid: move scsi_add_host()
>   aacraid: use private commands
>   aacraid: replace cmd_list with scsi_host_tagset_busy_iter()
>   aacraid: use scsi_host_tagset_busy_iter() to traverse outstanding
>     commands
>   dpt_i2o: drop cmd_list usage
>   scsi: drop scsi command list
>
>  block/blk-mq.c                    |  22 +-
>  drivers/scsi/aacraid/aachba.c     | 125 +++---
>  drivers/scsi/aacraid/aacraid.h    |   6 +-
>  drivers/scsi/aacraid/comminit.c   |  28 +-
>  drivers/scsi/aacraid/commsup.c    | 134 +++---
>  drivers/scsi/aacraid/linit.c      | 302 +++++++------
>  drivers/scsi/csiostor/csio_init.c |   3 +-
>  drivers/scsi/csiostor/csio_scsi.c |  48 +-
>  drivers/scsi/dpt_i2o.c            |  23 +-
>  drivers/scsi/fnic/fnic_scsi.c     | 916 ++++++++++++++++----------------------
>  drivers/scsi/hosts.c              |  27 ++
>  drivers/scsi/hpsa.c               | 310 ++++++-------
>  drivers/scsi/hpsa.h               |   1 -
>  drivers/scsi/hpsa_cmd.h           |   1 -
>  drivers/scsi/scsi.c               |   1 -
>  drivers/scsi/scsi_lib.c           |  69 +--
>  drivers/scsi/scsi_scan.c          |   1 -
>  drivers/scsi/snic/snic.h          |   2 +-
>  drivers/scsi/snic/snic_main.c     |   3 +
>  drivers/scsi/snic/snic_scsi.c     | 502 ++++++++++-----------
>  drivers/scsi/virtio_scsi.c        | 100 ++---
>  include/linux/blk-mq.h            |   2 +
>  include/scsi/scsi_cmnd.h          |  12 +-
>  include/scsi/scsi_device.h        |   1 -
>  include/scsi/scsi_host.h          |  17 +-
>  include/scsi/scsi_tcq.h           |  30 ++
>  26 files changed, 1311 insertions(+), 1375 deletions(-)
>
Hannes Reinecke Aug. 26, 2019, 3:27 p.m. UTC | #2
On 8/23/19 3:26 PM, John Garry wrote:
> On 29/05/2019 14:28, Hannes Reinecke wrote:
>> Hi all,
>>
>> quite some drivers use internal commands for various purposes, most
>> commonly sending TMFs or querying the HBA status.
>> While these commands use the same submission mechanism than normal
>> I/O commands, they will not be counted as outstanding commands,
>> requiring those drivers to implement their own mechanism to figure
>> out outstanding commands.
>> This patchset enables the use of reserved tags for the SCSI midlayer,
>> enabling LLDDs to rely on the block layer for tracking outstanding
>> commands.
>> More importantly, it allows LLDD to request a valid tag from the block
>> layer without having to implement some tracking mechanism within the
>> driver. This removes quite some hacks which were required for some
>> drivers (eg. fnic or snic).
>>
>> As usual, comments and reviews are welcome.
>>
> 
> Hi Hannes,
> 
> I was wondering if you have any plans to progress this series?
> 
> I don't mind helping out...
> 
Thanks for the reminder.
I'll need to re-evaluate this where we stand now with shared tags;
this patchset partially relies on them.
Will be sending an updated patchset.

Cheers,

Hannes
John Garry Sept. 2, 2019, 8:47 a.m. UTC | #3
On 26/08/2019 16:27, Hannes Reinecke wrote:
> On 8/23/19 3:26 PM, John Garry wrote:
>> On 29/05/2019 14:28, Hannes Reinecke wrote:
>>> Hi all,
>>>
>>> quite some drivers use internal commands for various purposes, most
>>> commonly sending TMFs or querying the HBA status.
>>> While these commands use the same submission mechanism than normal
>>> I/O commands, they will not be counted as outstanding commands,
>>> requiring those drivers to implement their own mechanism to figure
>>> out outstanding commands.
>>> This patchset enables the use of reserved tags for the SCSI midlayer,
>>> enabling LLDDs to rely on the block layer for tracking outstanding
>>> commands.
>>> More importantly, it allows LLDD to request a valid tag from the block
>>> layer without having to implement some tracking mechanism within the
>>> driver. This removes quite some hacks which were required for some
>>> drivers (eg. fnic or snic).
>>>
>>> As usual, comments and reviews are welcome.
>>>
>>
>> Hi Hannes,
>>
>> I was wondering if you have any plans to progress this series?
>>
>> I don't mind helping out...
>>
> Thanks for the reminder.

Hi Hannes,

> I'll need to re-evaluate this where we stand now with shared tags;

As Ming Lei mentioned in 
https://www.spinics.net/lists/linux-block/msg43779.html, the future for 
hostwide shared tags doesn't look bright. I would tend to agree.

> this patchset partially relies on them.

In which way? I didn't think/hope it did.

> Will be sending an updated patchset.

For me, the way I see forward is to upstream this series, in addition to 
Ming's, linked above.

As for LLDDs and the unique tag problem, I suggest that they use sbitmap 
to generate the tag internally if they want to expose multiple queues. 
 From our testing, using managed interrupts + sbitmap still far 
outperforms non-managed interrupts.

This approach would mean that we can still revisit hostwide shared tags 
or other some other approach in future.

Thanks,
John

>
> Cheers,
>
> Hannes
>
Hannes Reinecke Sept. 9, 2019, 3:11 p.m. UTC | #4
On 9/2/19 10:47 AM, John Garry wrote:
> On 26/08/2019 16:27, Hannes Reinecke wrote:
>> On 8/23/19 3:26 PM, John Garry wrote:
>>> On 29/05/2019 14:28, Hannes Reinecke wrote:
>>>> Hi all,
>>>>
>>>> quite some drivers use internal commands for various purposes, most
>>>> commonly sending TMFs or querying the HBA status.
>>>> While these commands use the same submission mechanism than normal
>>>> I/O commands, they will not be counted as outstanding commands,
>>>> requiring those drivers to implement their own mechanism to figure
>>>> out outstanding commands.
>>>> This patchset enables the use of reserved tags for the SCSI midlayer,
>>>> enabling LLDDs to rely on the block layer for tracking outstanding
>>>> commands.
>>>> More importantly, it allows LLDD to request a valid tag from the block
>>>> layer without having to implement some tracking mechanism within the
>>>> driver. This removes quite some hacks which were required for some
>>>> drivers (eg. fnic or snic).
>>>>
>>>> As usual, comments and reviews are welcome.
>>>>
>>>
>>> Hi Hannes,
>>>
>>> I was wondering if you have any plans to progress this series?
>>>
>>> I don't mind helping out...
>>>
>> Thanks for the reminder.
> 
> Hi Hannes,
> 
>> I'll need to re-evaluate this where we stand now with shared tags;
> 
> As Ming Lei mentioned in
> https://www.spinics.net/lists/linux-block/msg43779.html, the future for
> hostwide shared tags doesn't look bright. I would tend to agree.
> 
>> this patchset partially relies on them.
> 
> In which way? I didn't think/hope it did.
> 
>> Will be sending an updated patchset.
> 
> For me, the way I see forward is to upstream this series, in addition to
> Ming's, linked above.
> 
> As for LLDDs and the unique tag problem, I suggest that they use sbitmap
> to generate the tag internally if they want to expose multiple queues.
> From our testing, using managed interrupts + sbitmap still far
> outperforms non-managed interrupts.
> 
> This approach would mean that we can still revisit hostwide shared tags
> or other some other approach in future.
> 
Hmm. True. Will be checking.

Cheers,

Hannes
John Garry March 9, 2020, 12:48 p.m. UTC | #5
On 23/08/2019 14:26, John Garry wrote:
>>
>> quite some drivers use internal commands for various purposes, most
>> commonly sending TMFs or querying the HBA status.
>> While these commands use the same submission mechanism than normal
>> I/O commands, they will not be counted as outstanding commands,
>> requiring those drivers to implement their own mechanism to figure
>> out outstanding commands.
>> This patchset enables the use of reserved tags for the SCSI midlayer,
>> enabling LLDDs to rely on the block layer for tracking outstanding
>> commands.
>> More importantly, it allows LLDD to request a valid tag from the block
>> layer without having to implement some tracking mechanism within the
>> driver. This removes quite some hacks which were required for some
>> drivers (eg. fnic or snic).
>>
>> As usual, comments and reviews are welcome.
>>
> 
Hi Hannes,

JFYI, I have rebased this series to 5.6-rc4 here:

https://github.com/hisilicon/kernel-dev/tree/private-topic-sas-5.6-resv-commands-v1

I am interested in enabling this for libsas and associated HBAs, so 
there are some patches on top for that.

No review comments have been addressed, apart from removing "block: 
disable elevator for reserved tags"

Please let me know your plan for this series.

Thanks,
John

> 
> I was wondering if you have any plans to progress this series?
> 
> I don't mind helping out...
> 
> Cheers,
> John
> 
>> Hannes Reinecke (24):
>>   block: disable elevator for reserved tags
>>   scsi: add scsi_{get,put}_reserved_cmd()
>>   scsi: add 'nr_reserved_cmds' field to the SCSI host template
>>   csiostor: use reserved command for LUN reset
>>   scsi: add scsi_cmd_from_priv()
>>   virtio_scsi: use reserved commands for TMF
>>   scsi: add host tagset busy iterator
>>   fnic: use reserved commands
>>   fnic: use scsi_host_tagset_busy_iter() to traverse commands
>>   scsi: allocate separate queue for reserved commands
>>   scsi: add scsi_host_get_reserved_cmd()
>>   hpsa: move hpsa_hba_inquiry after scsi_add_host()
>>   hpsa: use reserved commands
Hannes Reinecke March 9, 2020, 1:57 p.m. UTC | #6
On 3/9/20 1:48 PM, John Garry wrote:
> On 23/08/2019 14:26, John Garry wrote:
>>>
>>> quite some drivers use internal commands for various purposes, most
>>> commonly sending TMFs or querying the HBA status.
>>> While these commands use the same submission mechanism than normal
>>> I/O commands, they will not be counted as outstanding commands,
>>> requiring those drivers to implement their own mechanism to figure
>>> out outstanding commands.
>>> This patchset enables the use of reserved tags for the SCSI midlayer,
>>> enabling LLDDs to rely on the block layer for tracking outstanding
>>> commands.
>>> More importantly, it allows LLDD to request a valid tag from the block
>>> layer without having to implement some tracking mechanism within the
>>> driver. This removes quite some hacks which were required for some
>>> drivers (eg. fnic or snic).
>>>
>>> As usual, comments and reviews are welcome.
>>>
>>
> Hi Hannes,
> 
> JFYI, I have rebased this series to 5.6-rc4 here:
> 
> https://github.com/hisilicon/kernel-dev/tree/private-topic-sas-5.6-resv-commands-v1
> 
> 
> I am interested in enabling this for libsas and associated HBAs, so
> there are some patches on top for that.
> 
> No review comments have been addressed, apart from removing "block:
> disable elevator for reserved tags"
> 
> Please let me know your plan for this series.
> 
The plan is to wait for the shared tagset patchset to go in first :-)

Without it we'll be running on one tag bitmap per queue, and we risk
duplicate tags when sending down reserved commands :-(

Cheers,

Hannes
John Garry March 9, 2020, 2:21 p.m. UTC | #7
On 09/03/2020 13:57, Hannes Reinecke wrote:
> On 3/9/20 1:48 PM, John Garry wrote:
>> On 23/08/2019 14:26, John Garry wrote:
>>>>
>>>> quite some drivers use internal commands for various purposes, most
>>>> commonly sending TMFs or querying the HBA status.
>>>> While these commands use the same submission mechanism than normal
>>>> I/O commands, they will not be counted as outstanding commands,
>>>> requiring those drivers to implement their own mechanism to figure
>>>> out outstanding commands.
>>>> This patchset enables the use of reserved tags for the SCSI midlayer,
>>>> enabling LLDDs to rely on the block layer for tracking outstanding
>>>> commands.
>>>> More importantly, it allows LLDD to request a valid tag from the block
>>>> layer without having to implement some tracking mechanism within the
>>>> driver. This removes quite some hacks which were required for some
>>>> drivers (eg. fnic or snic).
>>>>
>>>> As usual, comments and reviews are welcome.
>>>>
>>>
>> Hi Hannes,
>>
>> JFYI, I have rebased this series to 5.6-rc4 here:
>>
>> https://github.com/hisilicon/kernel-dev/tree/private-topic-sas-5.6-resv-commands-v1
>>
>>
>> I am interested in enabling this for libsas and associated HBAs, so
>> there are some patches on top for that.
>>
>> No review comments have been addressed, apart from removing "block:
>> disable elevator for reserved tags"
>>
>> Please let me know your plan for this series.
>>
> The plan is to wait for the shared tagset patchset to go in first :-)
> 

I think that one should go last. Or, to be more specific, switching the 
drivers to expose multiple queues - which is part of that series - 
should go last.

> Without it we'll be running on one tag bitmap per queue, and we risk
> duplicate tags when sending down reserved commands :-(

Until we expose multiple queues, we still have a single HW queue from 
blk-mq perspective, so will only have a single tagset per HBA, so no 
chance of duplicate tags.

This series should be able to go in without dependencies.

Thanks,
John
John Garry March 10, 2020, 8:43 a.m. UTC | #8
On 09/03/2020 14:21, John Garry wrote:
> On 09/03/2020 13:57, Hannes Reinecke wrote:
>> On 3/9/20 1:48 PM, John Garry wrote:
>>> On 23/08/2019 14:26, John Garry wrote:
>>>>>
>>>>> quite some drivers use internal commands for various purposes, most
>>>>> commonly sending TMFs or querying the HBA status.
>>>>> While these commands use the same submission mechanism than normal
>>>>> I/O commands, they will not be counted as outstanding commands,
>>>>> requiring those drivers to implement their own mechanism to figure
>>>>> out outstanding commands.
>>>>> This patchset enables the use of reserved tags for the SCSI midlayer,
>>>>> enabling LLDDs to rely on the block layer for tracking outstanding
>>>>> commands.
>>>>> More importantly, it allows LLDD to request a valid tag from the block
>>>>> layer without having to implement some tracking mechanism within the
>>>>> driver. This removes quite some hacks which were required for some
>>>>> drivers (eg. fnic or snic).
>>>>>
>>>>> As usual, comments and reviews are welcome.
>>>>>
>>>>
>>> Hi Hannes,
>>>
>>> JFYI, I have rebased this series to 5.6-rc4 here:
>>>
>>> https://github.com/hisilicon/kernel-dev/tree/private-topic-sas-5.6-resv-commands-v1 
>>>
>>>
>>>
>>> I am interested in enabling this for libsas and associated HBAs, so
>>> there are some patches on top for that.
>>>
>>> No review comments have been addressed, apart from removing "block:
>>> disable elevator for reserved tags"
>>>
>>> Please let me know your plan for this series.
>>>
>> The plan is to wait for the shared tagset patchset to go in first :-)
>>
> 
> I think that one should go last. Or, to be more specific, switching the 
> drivers to expose multiple queues - which is part of that series - 
> should go last.
> 
>> Without it we'll be running on one tag bitmap per queue, and we risk
>> duplicate tags when sending down reserved commands :-(
> 
> Until we expose multiple queues, we still have a single HW queue from 
> blk-mq perspective, so will only have a single tagset per HBA, so no 
> chance of duplicate tags.
> 
> This series should be able to go in without dependencies.

BTW, for the other SCSI HBA drivers which use libsas, it would be better 
if they could stop managing their own tags and switch to use the request 
tag. That would mean that we need to reserve some tags, which is 
currently not done in those drivers (pm8xxx, anyway).

If I were to make this change, are there mvsas and aic9xxx cards around 
to test? I have a pm8xxx card.

Thanks,
John