linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: yongmyung lee <ymhungry.lee@samsung.com>
To: Bart Van Assche <bvanassche@acm.org>,
	Avri Altman <Avri.Altman@wdc.com>,
	"James E . J . Bottomley" <jejb@linux.vnet.ibm.com>,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: ALIM AKHTAR <alim.akhtar@samsung.com>,
	"asutoshd@codeaurora.org" <asutoshd@codeaurora.org>,
	Zang Leigang <zangleigang@hisilicon.com>,
	Avi Shchislowski <Avi.Shchislowski@wdc.com>,
	Bean Huo <beanhuo@micron.com>,
	"cang@codeaurora.org" <cang@codeaurora.org>,
	"stanley.chu@mediatek.com" <stanley.chu@mediatek.com>,
	MOHAMMED RAFIQ KAMAL BASHA <md.rafiq@samsung.com>,
	Sang-yoon Oh <sangyoon.oh@samsung.com>,
	Jinyoung CHOI <j-young.choi@samsung.com>,
	Adel Choi <adel.choi@samsung.com>,
	BoRam Shin <boram.shin@samsung.com>,
	Sung-Jun Park <sungjun07.park@samsung.com>,
	Daejun Park <daejun7.park@samsung.com>
Subject: Another approach of UFSHPB
Date: Wed, 20 May 2020 07:31:37 +0900	[thread overview]
Message-ID: <231786897.01589928601376.JavaMail.epsvc@epcpadp1> (raw)
In-Reply-To: <835c57b9-f792-2460-c3cc-667031969d63@acm.org>

Hello, All!

I write this email that is my opinion regard to HPB.
This mail is very long. So, summary is ... :

[Summary]
1. HPB, Write Booster and other new UFS features would 
   be managed by ufs-extended feature layer (additional LLD layer)
2. Map table of HPB will be managed in LLD (UFS Driver)
3. Each ufs feature driver can be implemented as a loadable kernel module
4. Samsung prepares test environment based on QEMU also
5. We will push our patch as soon! Please review this.


This is body: 

I am Yongmyung Lee, who is one of the original authors of the HPB driver,
which was out-of-tree implementation from linux kernel mainline.

I have seen the works done by Bean Hou and Avri Altman, which are very impressive.
I also have some opinion on the driver 
and would like to consult with you about it and prepare a set of patches.

The basic idea of my approach is similar to Bean's work
of managing HPB map-data in LLD (UFS Driver).
As HPB Driver is closely related to the behavior of the
UFS Device, I think it would be nice if HPB Driver runs on the LLD layer.

HPB Driver is closely related to the behavior of the UFS Device. 
Thus I think it would be nice if HPB Driver works on additional feature layer on LLD. 

Of course, Avri's work makes sense.
I believe HPB's scheme can be a good alternative to HMB(Host Memory Buffer)of NVMe
for storage devices like eMMC or SATA SSD (may be DRAMless).
Once HPB-like scheme is applied, 
these storage devices could benefit from performance improvement
in read latency as well as throughput.

However, it would not be desirable to relocate 
the map table management to the upper layer such as scsi-dh
as there are no such specification supported for the moment.

When the similar specifications to HPB will be proposed in JEDEC or T13,
it would be a great chance to have a deep discussion on 
which layer to be the best fit for the map table management.

Before disclosing my opinion on the HPB driver development approach,
I would like to introduce the main characteristics of Extended UFS-Feature in progress: 

  * Providing extended functionality.
    That is, UFS device shall work well without extended UFS-Features.
    By using them, however, it will be more powerful in certain application scenarios.

  * Designed to suit the Embedded system (such as Android)
    Due to the characteristics of UFS device, 
    it is being utilized mainly as a mobile storage.
    We are mainly trying to improve performance in Android system. 

  * Closely connected to the UFS devices.
    The Extended UFS-Features use UFS query requests
    which are UFS private commands.
    In addition, other features are closely related with
    electrical and physical characteristics of UFS
   (such as Voltage, Gear-scaling and Runtime suspend/resume etc.,)
    and should be taken into consideration
 
Therefore, it is desirable to have those features managed 
separately from the original UFS driver.

Current extended UFS-Features which are approved by the JEDEC are as below:

  * UFS HPB
  * UFS WriteBooster

In addition to that, we are developing and testing various UFS-features
that would be beneficial in the Embedded system 
(At the moment, most of them would be Android system).
As we have already successfully provided enhanced features 
in cooperation with major Android Phone vendors,
now we willingly want to contribute our works to the Linux kernel mainline.
 

Currently, UFS driver (usually ufshcd.c) has become bulky and complex.
So, I would like to split these codes into layers 
like the works of Bean Huo and Avril Altman.
Especially, I suggest the UFS-Feature Driver model based on Linux Bus-Driver Model,
which is suitable to manage all Extended UFS-Feature drivers like the Figure as below:


UFS Driver data structure (struct ufs_hba)
   |
   |    -----------------------    -- ufshpb driver -- <- attach ufshpb device driver (it can be loadable)
   |---| ufs-ext feature layer |   -- ufs-wb driver -- <- attach ufswb device driver
   |   |                       |   -- ...           -- <- ...
   |    -----------------------    -- next ufs feature driver  -- <- attach ufs-next feature driver

* wb : write-booster
 

Each extended UFS-Feature Driver has a bus of ufs-ext feature type
and it is bound to the ufs-ext feature layer.
The ufs-ext feature layer manages common APIs used by each Extended UFS-Feature Driver.
The APIs consist of UFS Query request and 
UFS Vendor commands related to each ufs-ext feature driver. 


Furthermore, each ufs-ext feature driver will be written as a loadable kernel module.
Vendors (e.g., Android Phone manufacturer) could optionally load and remove each module.
Also they can customize the parameters of ufs-ext feature drivers
while each module is being loaded.
(For example, vendor would set the maximum memory size
 that can be reclaimed in the Host Control mode in HPB)


We are expecting that this kind of standardized and 
abstracted model will surely make it easier to manage the ufs-ext feature drivers.

I noticed that the ufs-wb (write-booster) patch was written by Asutosh Das and Stanley Chu. 
The basic idea of ufs-wb code is to proceed write boosting
in adjusting gear-scaling, which is a good idea that I did not think of.
I also would like to incorporate ufs-wb driver into the ufs-ext feature layer,
and in this way the footprint of UFS driver could be slimmed down likewise.

In brief, system vendors can optimize their system
by loading each ufs-ext feature driver selectively. 

As of now I am still working on the patch and
have it tested on the android phone with real UFS-HPB device on the stable androidzed kernel
as well as on a ufs-simulator based on QEMU to reflect latest kernel version with my team members. 

In addition, we plan to provide QEMU with UFS-simulator
for a test environment for UFS driver development.
I hope there will be a lot of comments on my idea
and patch set to be pushed in the near future
and I will willingly reflect every single opinion.

I will push up my patch set as soon as possible.

Thank you


  parent reply	other threads:[~2020-05-19 22:50 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-15 10:30 [RFC PATCH 00/13] scsi: ufs: Add HPB Support Avri Altman
2020-05-15 10:30 ` [RFC PATCH 01/13] scsi: ufs: Add HPB parameters Avri Altman
2020-05-15 10:30 ` [RFC PATCH 02/13] scsi: ufshpb: Init part I - Read HPB config Avri Altman
2020-05-15 15:33   ` Randy Dunlap
2020-05-16  1:46   ` Bart Van Assche
2020-05-16  1:57   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 03/13] scsi: scsi_dh: Introduce scsi_dh_ufshpb Avri Altman
2020-05-16  1:48   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 04/13] scsi: ufs: ufshpb: Init part II - Attach scsi device Avri Altman
2020-05-16  1:52   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 05/13] scsi: ufs: ufshpb: Disable HPB if no HPB-enabled luns Avri Altman
2020-05-16  2:02   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 06/13] scsi: scsi_dh: ufshpb: Prepare for L2P cache management Avri Altman
2020-05-16  2:13   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 07/13] scsi: scsi_dh: ufshpb: Add ufshpb state machine Avri Altman
2020-05-16  2:44   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 08/13] scsi: dh: ufshpb: Activate pinned regions Avri Altman
2020-05-15 10:30 ` [RFC PATCH 09/13] scsi: ufshpb: Add response API Avri Altman
2020-05-16  3:06   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 10/13] scsi: dh: ufshpb: Add ufshpb_set_params Avri Altman
2020-05-15 10:30 ` [RFC PATCH 11/13] scsi: Allow device handler set their own CDB Avri Altman
2020-05-16  3:19   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 12/13] scsi: dh: ufshpb: Add prep_fn handler Avri Altman
2020-05-16  3:40   ` Bart Van Assche
2020-05-15 10:30 ` [RFC PATCH 13/13] scsi: scsi_dh: ufshpb: Add "Cold" subregions timer Avri Altman
2020-05-16  3:50 ` [RFC PATCH 00/13] scsi: ufs: Add HPB Support Bart Van Assche
2020-05-16  9:14   ` Avri Altman
2020-05-16 17:14     ` Bart Van Assche
     [not found]     ` <CGME20200516171420epcas2p108c570904c5117c3654d71e0a2842faa@epcms2p7>
2020-05-19 22:31       ` yongmyung lee [this message]
2020-05-20 17:55         ` Another approach of UFSHPB Christoph Hellwig
2020-05-20 21:19           ` Bart Van Assche
2020-05-22 16:35             ` Bart Van Assche
2020-05-22 16:49         ` Bart Van Assche
     [not found]         ` <CGME20200516171420epcas2p108c570904c5117c3654d71e0a2842faa@epcms2p4>
2020-05-25  5:40           ` Daejun Park
2020-05-25 14:56             ` Bart Van Assche
2020-05-26  6:15               ` Avri Altman
2020-05-26 17:03                 ` Bart Van Assche
     [not found]                 ` <CGME20200516171420epcas2p108c570904c5117c3654d71e0a2842faa@epcms2p3>
2020-05-27  9:11                   ` Daejun Park
2020-05-27 11:46                     ` Bean Huo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=231786897.01589928601376.JavaMail.epsvc@epcpadp1 \
    --to=ymhungry.lee@samsung.com \
    --cc=Avi.Shchislowski@wdc.com \
    --cc=Avri.Altman@wdc.com \
    --cc=adel.choi@samsung.com \
    --cc=alim.akhtar@samsung.com \
    --cc=asutoshd@codeaurora.org \
    --cc=beanhuo@micron.com \
    --cc=boram.shin@samsung.com \
    --cc=bvanassche@acm.org \
    --cc=cang@codeaurora.org \
    --cc=daejun7.park@samsung.com \
    --cc=j-young.choi@samsung.com \
    --cc=jejb@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=md.rafiq@samsung.com \
    --cc=sangyoon.oh@samsung.com \
    --cc=stanley.chu@mediatek.com \
    --cc=sungjun07.park@samsung.com \
    --cc=zangleigang@hisilicon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).