public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] scsi: ufs: Increase the maximum data buffer size
@ 2022-07-25 17:35 Bart Van Assche
  2022-07-26 12:54 ` Avri Altman
  0 siblings, 1 reply; 3+ messages in thread
From: Bart Van Assche @ 2022-07-25 17:35 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: Jaegeuk Kim, linux-scsi, Adrian Hunter, Bart Van Assche,
	Avri Altman, Bean Huo, Stanley Chu, James E.J. Bottomley,
	Matthias Brugger

Measurements have shown that for some UFS devices the maximum sequential
I/O throughput is achieved with a transfer size above 512 KiB. Hence
increase the maximum size of the data buffer associated with a single
request from SCSI_DEFAULT_MAX_SECTORS (1024) * 512 bytes = 512 KiB into
255 MiB.

Notes:
- The maximum data buffer size supported by the UFSHCI specification
  is 65535 * 256 KiB or about 16 GiB.
- The maximum data buffer size for READ(10) commands is 65535 logical
  blocks. To transfer more than 65535 * 4096 bytes = 255 MiB with a
  single SCSI command, the READ(16) command is required. Support for
  READ(16) is optional in the UFS 3.1 and UFS 4.0 standards.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Avri Altman <avri.altman@wdc.com>
Cc: Bean Huo <beanhuo@micron.com>
Cc: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/ufs/core/ufshcd.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 36b7212e9cb5..a6fddf4c546e 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8365,6 +8365,7 @@ static struct scsi_host_template ufshcd_driver_template = {
 	.cmd_per_lun		= UFSHCD_CMD_PER_LUN,
 	.can_queue		= UFSHCD_CAN_QUEUE,
 	.max_segment_size	= PRDT_DATA_BYTE_COUNT_MAX,
+	.max_sectors		= 65535 * 4096 / SECTOR_SIZE, /* 255 MiB */
 	.max_host_blocked	= 1,
 	.track_queue_depth	= 1,
 	.sdev_groups		= ufshcd_driver_groups,

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

* RE: [PATCH v2] scsi: ufs: Increase the maximum data buffer size
  2022-07-25 17:35 [PATCH v2] scsi: ufs: Increase the maximum data buffer size Bart Van Assche
@ 2022-07-26 12:54 ` Avri Altman
  2022-07-26 22:37   ` Bart Van Assche
  0 siblings, 1 reply; 3+ messages in thread
From: Avri Altman @ 2022-07-26 12:54 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen
  Cc: Jaegeuk Kim, linux-scsi@vger.kernel.org, Adrian Hunter, Bean Huo,
	Stanley Chu, James E.J. Bottomley, Matthias Brugger

Bart hi,

> Measurements have shown that for some UFS devices the maximum sequential
> I/O throughput is achieved with a transfer size above 512 KiB. Hence
> increase the maximum size of the data buffer associated with a single
> request from SCSI_DEFAULT_MAX_SECTORS (1024) * 512 bytes = 512 KiB into
> 255 MiB.
> 
> Notes:
> - The maximum data buffer size supported by the UFSHCI specification
>   is 65535 * 256 KiB or about 16 GiB.
> - The maximum data buffer size for READ(10) commands is 65535 logical
>   blocks. To transfer more than 65535 * 4096 bytes = 255 MiB with a
>   single SCSI command, the READ(16) command is required. Support for
>   READ(16) is optional in the UFS 3.1 and UFS 4.0 standards.
I still have concerns of a negative impact of a too-large-max-sectors.

I replicate your fio measurements using galaxy S22 - one of the most advanced production platform currently in the market.
See the results below: fio bs vs max-sectors.  data is the read BW[MiB/s].
Given that:
a) there isn't that much of a difference among the various max-sectors
b) max-sectors is configurable via max_sectors_kb sysfs entry, and
c) going from the benchmark world into the real world, a large write (255MiB),
    interleaved by many small reads (4k), may cause high latency, up to even a timeout (!?)

I would leave the max-sectors threshold as it is, or use the moderate 1MB limit.
Unless you can back the  "Measurements have shown" statement with a more concrete data.

Thanks,
Avri


	|	1MB		|	2MB		|	128MB		|	255MB
--------------------------------------------------------------------------------------------------------------------
4KiB	|	14.7		|	13.3		|	15.7		|	19.5
8KiB	|	26.7		|	27.4		|	25.8		|	30.0
16KiB	|	44		|	53.2		|	46.3		|	61.2
64KiB	|	179		|	207		|	171		|	184
32KiB	|	100		|	120		|	105		|	119
128KiB	|	275		|	322		|	271		|	256
256KiB	|	440		|	452		|	417		|	378
512KiB	|	535		|	525		|	483		|	471
1MiB	|	592		|	584		|	531		|	408
2MiB	|	349		|	361		|	375		|	297
4MiB	|	502		|	492		|	515		|	441
8MiB	|	645		|	663		|	682		|	650
16MiB	|	752		|	749		|	752		|	762
32MiB	|	817		|	790		|	822		|	791
64MiB	|	1710		|	1703		|	1700		|	1692
128MiB	|	1733		|	1730		|	1724		|	1712
256MiB	|	1752		|	1748		|	1738		|	1732

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

* Re: [PATCH v2] scsi: ufs: Increase the maximum data buffer size
  2022-07-26 12:54 ` Avri Altman
@ 2022-07-26 22:37   ` Bart Van Assche
  0 siblings, 0 replies; 3+ messages in thread
From: Bart Van Assche @ 2022-07-26 22:37 UTC (permalink / raw)
  To: Avri Altman, Martin K . Petersen
  Cc: Jaegeuk Kim, linux-scsi@vger.kernel.org, Adrian Hunter, Bean Huo,
	Stanley Chu, James E.J. Bottomley, Matthias Brugger

On 7/26/22 05:54, Avri Altman wrote:
> Bart hi,
> 
>> Measurements have shown that for some UFS devices the maximum sequential
>> I/O throughput is achieved with a transfer size above 512 KiB. Hence
>> increase the maximum size of the data buffer associated with a single
>> request from SCSI_DEFAULT_MAX_SECTORS (1024) * 512 bytes = 512 KiB into
>> 255 MiB.
>>
>> Notes:
>> - The maximum data buffer size supported by the UFSHCI specification
>>    is 65535 * 256 KiB or about 16 GiB.
>> - The maximum data buffer size for READ(10) commands is 65535 logical
>>    blocks. To transfer more than 65535 * 4096 bytes = 255 MiB with a
>>    single SCSI command, the READ(16) command is required. Support for
>>    READ(16) is optional in the UFS 3.1 and UFS 4.0 standards.
> I still have concerns of a negative impact of a too-large-max-sectors.
> 
> I replicate your fio measurements using galaxy S22 - one of the most advanced production platform currently in the market.
> See the results below: fio bs vs max-sectors.  data is the read BW[MiB/s].
> Given that:
> a) there isn't that much of a difference among the various max-sectors
> b) max-sectors is configurable via max_sectors_kb sysfs entry, and
> c) going from the benchmark world into the real world, a large write (255MiB),
>      interleaved by many small reads (4k), may cause high latency, up to even a timeout (!?)
> 
> I would leave the max-sectors threshold as it is, or use the moderate 1MB limit.
> Unless you can back the  "Measurements have shown" statement with a more concrete data.
> 
> Thanks,
> Avri
> 
> 
> 	|	1MB		|	2MB		|	128MB		|	255MB
> --------------------------------------------------------------------------------------------------------------------
> 4KiB	|	14.7		|	13.3		|	15.7		|	19.5
> 8KiB	|	26.7		|	27.4		|	25.8		|	30.0
> 16KiB	|	44		|	53.2		|	46.3		|	61.2
> 64KiB	|	179		|	207		|	171		|	184
> 32KiB	|	100		|	120		|	105		|	119
> 128KiB	|	275		|	322		|	271		|	256
> 256KiB	|	440		|	452		|	417		|	378
> 512KiB	|	535		|	525		|	483		|	471
> 1MiB	|	592		|	584		|	531		|	408
> 2MiB	|	349		|	361		|	375		|	297
> 4MiB	|	502		|	492		|	515		|	441
> 8MiB	|	645		|	663		|	682		|	650
> 16MiB	|	752		|	749		|	752		|	762
> 32MiB	|	817		|	790		|	822		|	791
> 64MiB	|	1710		|	1703		|	1700		|	1692
> 128MiB	|	1733		|	1730		|	1724		|	1712
> 256MiB	|	1752		|	1748		|	1738		|	1732

Hi Avri,

Thank you for having run these measurements. Regarding (b): the 
max_sectors_kb sysfs entry can be used to reduce the value set by a SCSI 
LLD but not to increase that value. From block/blk-sysfs.c:

	if (max_sectors_kb > max_hw_sectors_kb)
		return -EINVAL;

I will post a new version of this patch with the max_sectors limit set 
to 1 MiB.

Thanks,

Bart.

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

end of thread, other threads:[~2022-07-26 22:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-25 17:35 [PATCH v2] scsi: ufs: Increase the maximum data buffer size Bart Van Assche
2022-07-26 12:54 ` Avri Altman
2022-07-26 22:37   ` Bart Van Assche

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox