RE: [PATCH v3] scsi: ufs: Increase the maximum data buffer size

정요한(JOUNG YOHAN) Mobile SE
2022-08-02T23:56:26Z

Hi bart

Is it possible by adding only max_sector to increase the data buffer size?
I think the data buffer will split to 512 KiB, because the sg_table size is SG_ALL

Thanks,
yohan

> -----Original Message-----
> From: Bart Van Assche <bvanassche@acm.org>
> Sent: Wednesday, July 27, 2022 7:52 AM
> To: Martin K . Petersen <martin.petersen@oracle.com>
> Cc: Jaegeuk Kim <jaegeuk@kernel.org>; linux-scsi@vger.kernel.org; Adrian
> Hunter <adrian.hunter@intel.com>; Bart Van Assche <bvanassche@acm.org>;
> Avri Altman <avri.altman@wdc.com>; Bean Huo <beanhuo@micron.com>; Stanley
> Chu <stanley.chu@mediatek.com>; James E.J. Bottomley <jejb@linux.ibm.com>;
> Matthias Brugger <matthias.bgg@gmail.com>
> Subject: [PATCH v3] scsi: ufs: Increase the maximum data buffer size
>
> Measurements for one particular UFS controller + UFS device show a 25%
> higher read bandwidth if the maximum data buffer size is increased from
> 512 KiB to 1 MiB. Hence increase the maximum size of the data buffer
> associated with a single request from SCSI_DEFAULT_MAX_SECTORS (1024)
> * 512 bytes = 512 KiB to 1 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>
> ---
> Changes compared to v2: changed maximum transfer size 255 MiB to 1 MiB.
> Changes compared to v1: changed maximum transfer size from 1 GiB to 255 MiB.
>
> 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..678bc8d6d6aa 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 = (1 << 20) / SECTOR_SIZE, /* 1 MiB */
> .max_host_blocked = 1,
> .track_queue_depth = 1,
> .sdev_groups = ufshcd_driver_groups,