Linux-HyperV Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk
@ 2020-01-11  8:17 longli
  2020-01-11 12:08 ` Ming Lei
  2020-01-12 16:27 ` Michael Kelley
  0 siblings, 2 replies; 4+ messages in thread
From: longli @ 2020-01-11  8:17 UTC (permalink / raw)
  To: K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger, Sasha Levin,
	James E.J. Bottomley, Martin K. Petersen, linux-hyperv,
	linux-scsi, linux-kernel
  Cc: Long Li

From: Long Li <longli@microsoft.com>

Commit 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue and CPU queue")
introduced a regression for disks attached to IDE. For these disks the host VSP only offers
one VMBUS channel. Setting multiple queues can overload the VMBUS channel and result in
performance drop for high queue depth workload on system with large number of CPUs.

Fix it by leaving the number of hardware queues to 1 (default value) for IDE
disks.

Fixes: 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue and CPU queue")
Signed-off-by: Long Li <longli@microsoft.com>
---
 drivers/scsi/storvsc_drv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index f8faf8b3d965..992b28e40374 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1842,9 +1842,11 @@ static int storvsc_probe(struct hv_device *device,
 	 */
 	host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT);
 	/*
+	 * For non-IDE disks, the host supports multiple channels.
 	 * Set the number of HW queues we are supporting.
 	 */
-	host->nr_hw_queues = num_present_cpus();
+	if (dev_id->driver_data != IDE_GUID)
+		host->nr_hw_queues = num_present_cpus();
 
 	/*
 	 * Set the error handler work queue.
-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk
  2020-01-11  8:17 [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk longli
@ 2020-01-11 12:08 ` Ming Lei
  2020-01-12 16:27 ` Michael Kelley
  1 sibling, 0 replies; 4+ messages in thread
From: Ming Lei @ 2020-01-11 12:08 UTC (permalink / raw)
  To: longli
  Cc: K. Y. Srinivasan, Haiyang Zhang, Stephen Hemminger, Sasha Levin,
	James E.J. Bottomley, Martin K. Petersen, linux-hyperv,
	Linux SCSI List, Linux Kernel Mailing List, Long Li

On Sat, Jan 11, 2020 at 4:17 PM <longli@linuxonhyperv.com> wrote:
>
> From: Long Li <longli@microsoft.com>
>
> Commit 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue and CPU queue")
> introduced a regression for disks attached to IDE. For these disks the host VSP only offers
> one VMBUS channel. Setting multiple queues can overload the VMBUS channel and result in
> performance drop for high queue depth workload on system with large number of CPUs.
>
> Fix it by leaving the number of hardware queues to 1 (default value) for IDE
> disks.
>
> Fixes: 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue and CPU queue")
> Signed-off-by: Long Li <longli@microsoft.com>
> ---
>  drivers/scsi/storvsc_drv.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
> index f8faf8b3d965..992b28e40374 100644
> --- a/drivers/scsi/storvsc_drv.c
> +++ b/drivers/scsi/storvsc_drv.c
> @@ -1842,9 +1842,11 @@ static int storvsc_probe(struct hv_device *device,
>          */
>         host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT);
>         /*
> +        * For non-IDE disks, the host supports multiple channels.
>          * Set the number of HW queues we are supporting.
>          */
> -       host->nr_hw_queues = num_present_cpus();
> +       if (dev_id->driver_data != IDE_GUID)
> +               host->nr_hw_queues = num_present_cpus();
>
>         /*
>          * Set the error handler work queue.
> --
> 2.20.1
>

Reviewed-by: Ming Lei <ming.lei@redhat.com>

-- 
Ming Lei

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk
  2020-01-11  8:17 [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk longli
  2020-01-11 12:08 ` Ming Lei
@ 2020-01-12 16:27 ` Michael Kelley
  2020-01-14  0:09   ` Long Li
  1 sibling, 1 reply; 4+ messages in thread
From: Michael Kelley @ 2020-01-12 16:27 UTC (permalink / raw)
  To: longli, KY Srinivasan, Haiyang Zhang, Stephen Hemminger,
	Sasha Levin, James E.J. Bottomley, Martin K. Petersen,
	linux-hyperv, linux-scsi, linux-kernel
  Cc: Long Li

From: Long Li <longli@microsoft.com>  Sent: Saturday, January 11, 2020 12:17 AM
> 
> Commit 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue and
> CPU queue")
> introduced a regression for disks attached to IDE. For these disks the host VSP only offers
> one VMBUS channel. Setting multiple queues can overload the VMBUS channel and result
> in
> performance drop for high queue depth workload on system with large number of CPUs.
> 
> Fix it by leaving the number of hardware queues to 1 (default value) for IDE
> disks.
> 
> Fixes: 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue and CPU
> queue")
> Signed-off-by: Long Li <longli@microsoft.com>
> ---
>  drivers/scsi/storvsc_drv.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
> index f8faf8b3d965..992b28e40374 100644
> --- a/drivers/scsi/storvsc_drv.c
> +++ b/drivers/scsi/storvsc_drv.c
> @@ -1842,9 +1842,11 @@ static int storvsc_probe(struct hv_device *device,
>  	 */
>  	host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT);
>  	/*
> +	 * For non-IDE disks, the host supports multiple channels.
>  	 * Set the number of HW queues we are supporting.
>  	 */
> -	host->nr_hw_queues = num_present_cpus();
> +	if (dev_id->driver_data != IDE_GUID)

This function already has a pre-computed value of this test in
the local variable "dev_is_ide".   It would be more consistent
to just use it.

Michael

> +		host->nr_hw_queues = num_present_cpus();
> 
>  	/*
>  	 * Set the error handler work queue.
> --
> 2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk
  2020-01-12 16:27 ` Michael Kelley
@ 2020-01-14  0:09   ` Long Li
  0 siblings, 0 replies; 4+ messages in thread
From: Long Li @ 2020-01-14  0:09 UTC (permalink / raw)
  To: Michael Kelley, longli, KY Srinivasan, Haiyang Zhang,
	Stephen Hemminger, Sasha Levin, James E.J. Bottomley,
	Martin K. Petersen, linux-hyperv, linux-scsi, linux-kernel

>Subject: RE: [PATCH] scsi: storvsc: Correctly set number of hardware queues for
>IDE disk
>
>From: Long Li <longli@microsoft.com>  Sent: Saturday, January 11, 2020 12:17
>AM
>>
>> Commit 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between
>> hardware queue and CPU queue") introduced a regression for disks
>> attached to IDE. For these disks the host VSP only offers one VMBUS
>> channel. Setting multiple queues can overload the VMBUS channel and
>> result in performance drop for high queue depth workload on system
>> with large number of CPUs.
>>
>> Fix it by leaving the number of hardware queues to 1 (default value)
>> for IDE disks.
>>
>> Fixes: 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between
>> hardware queue and CPU
>> queue")
>> Signed-off-by: Long Li <longli@microsoft.com>
>> ---
>>  drivers/scsi/storvsc_drv.c | 4 +++-
>>  1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
>> index f8faf8b3d965..992b28e40374 100644
>> --- a/drivers/scsi/storvsc_drv.c
>> +++ b/drivers/scsi/storvsc_drv.c
>> @@ -1842,9 +1842,11 @@ static int storvsc_probe(struct hv_device *device,
>>  	 */
>>  	host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT);
>>  	/*
>> +	 * For non-IDE disks, the host supports multiple channels.
>>  	 * Set the number of HW queues we are supporting.
>>  	 */
>> -	host->nr_hw_queues = num_present_cpus();
>> +	if (dev_id->driver_data != IDE_GUID)
>
>This function already has a pre-computed value of this test in
>the local variable "dev_is_ide".   It would be more consistent
>to just use it.
>
>Michael

I will send v2 to address this.

Long

>
>> +		host->nr_hw_queues = num_present_cpus();
>>
>>  	/*
>>  	 * Set the error handler work queue.
>> --
>> 2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-11  8:17 [PATCH] scsi: storvsc: Correctly set number of hardware queues for IDE disk longli
2020-01-11 12:08 ` Ming Lei
2020-01-12 16:27 ` Michael Kelley
2020-01-14  0:09   ` Long Li

Linux-HyperV Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-hyperv/0 linux-hyperv/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-hyperv linux-hyperv/ https://lore.kernel.org/linux-hyperv \
		linux-hyperv@vger.kernel.org
	public-inbox-index linux-hyperv

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-hyperv


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git