Re: [RFC PATCH v3 0/5] scsi: ufs: Add Host Performance Booster Support

From: Bean Huo
Date: Sun Jun 28 2020 - 08:26:16 EST


Hi Daejun

Seems you intentionally ignored to give you comments on my suggestion.
let me provide the reason.

Before submitting your next version patch, please check your L2P
mapping HPB reqeust submission logical algorithem. I have did
performance comparison testing on 4KB, there are about 13% performance
drop. Also the hit count is lower. I don't know if this is related to
your current work queue scheduling, since you didn't add the timer for
each HPB request.

Thanks,

Bean


On Tue, 2020-06-23 at 10:02 +0900, Daejun Park wrote:
> Changelog:
>
> v2 -> v3
> 1. Add checking input module parameter value.
> 2. Change base commit from 5.8/scsi-queue to 5.9/scsi-queue.
> 3. Cleanup for unused variables and label.
>
> v1 -> v2
> 1. Change the full boilerplate text to SPDX style.
> 2. Adopt dynamic allocation for sub-region data structure.
> 3. Cleanup.
>
> NAND flash memory-based storage devices use Flash Translation Layer
> (FTL)
> to translate logical addresses of I/O requests to corresponding flash
> memory addresses. Mobile storage devices typically have RAM with
> constrained size, thus lack in memory to keep the whole mapping
> table.
> Therefore, mapping tables are partially retrieved from NAND flash on
> demand, causing random-read performance degradation.
>
> To improve random read performance, JESD220-3 (HPB v1.0) proposes HPB
> (Host Performance Booster) which uses host system memory as a cache
> for the
> FTL mapping table. By using HPB, FTL data can be read from host
> memory
> faster than from NAND flash memory.
>
> The current version only supports the DCM (device control mode).
> This patch consists of 4 parts to support HPB feature.
>
> 1) UFS-feature layer
> 2) HPB probe and initialization process
> 3) READ -> HPB READ using cached map information
> 4) L2P (logical to physical) map management
>
> The UFS-feature is an additional layer to avoid the structure in
> which the
> UFS-core driver and the UFS-feature are entangled with each other in
> a
> single module.
> By adding the layer, UFS-features composed of various combinations
> can be
> supported. Also, even if a new feature is added, modification of the
> UFS-core driver can be minimized.
>
> In the HPB probe and init process, the device information of the UFS
> is
> queried. After checking supported features, the data structure for
> the HPB
> is initialized according to the device information.
>
> A read I/O in the active sub-region where the map is cached is
> changed to
> HPB READ by the HPB module.
>
> The HPB module manages the L2P map using information received from
> the
> device. For active sub-region, the HPB module caches through
> ufshpb_map
> request. For the in-active region, the HPB module discards the L2P
> map.
> When a write I/O occurs in an active sub-region area, associated
> dirty
> bitmap checked as dirty for preventing stale read.
>
> HPB is shown to have a performance improvement of 58 - 67% for random
> read
> workload. [1]
>
> This series patches are based on the 5.9/scsi-queue branch.
>
> [1]:
>
https://www.usenix.org/conference/hotstorage17/program/presentation/jeong
>
> Daejun park (5):
> scsi: ufs: Add UFS feature related parameter
> scsi: ufs: Add UFS feature layer
> scsi: ufs: Introduce HPB module
> scsi: ufs: L2P map management for HPB read
> scsi: ufs: Prepare HPB read for cached sub-region
>
> drivers/scsi/ufs/Kconfig | 9 +
> drivers/scsi/ufs/Makefile | 3 +-
> drivers/scsi/ufs/ufs.h | 12 +
> drivers/scsi/ufs/ufsfeature.c | 148 +++
> drivers/scsi/ufs/ufsfeature.h | 69 ++
> drivers/scsi/ufs/ufshcd.c | 23 +-
> drivers/scsi/ufs/ufshcd.h | 3 +
> drivers/scsi/ufs/ufshpb.c | 1996
> ++++++++++++++++++++++++++++++++++++
> drivers/scsi/ufs/ufshpb.h | 234 +++++
> 9 files changed, 2494 insertions(+), 3 deletions(-)
> created mode 100644 drivers/scsi/ufs/ufsfeature.c
> created mode 100644 drivers/scsi/ufs/ufsfeature.h
> created mode 100644 drivers/scsi/ufs/ufshpb.c
> created mode 100644 drivers/scsi/ufs/ufshpb.h