一. HPB Overview
HPB全称为Host Performance Booster, 是利用手机内存缓存UFS Devices 主控(这里指的是Ufs Device Controller, 比如群联/慧荣等厂商的Ufs,控制运行FTL程序代码)的L2P表,来提升读性能,尤其是长时间使用后的随机读性能。
HPB技术是Jedec UFS3.1加入的Feature, 用来提升随机读性能,其实这个技术在无缓存的SSD上很常见。
二. 手机HPB方案介绍
目前Qcom/MTK/Sprd都开发了支持Ufs Host IP的手机芯片,现在用户越来越多的用户重视手机平时使用的流畅性,流畅性又和随机读有很大联系,所以支持HPB能提高竞争力。
以下以高通平台来举例:
Qcom Ufs Hos和Ufs Devices进行Probe匹配:
/**
* ufshcd_probe_hba - probe hba to detect device and initialize
* @hba: per-adapter instance
*
* Execute link-startup and verify device initialization
*/
static int ufshcd_probe_hba(struct ufs_hba *hba)
{
ufsf_device_check(hba);
}
检查Ufs Devices Descriptor/Geometry Descriptor/Unit Descriptor 涉及HPB的 属性
void ufsf_device_check(struct ufs_hba *hba)
{
struct ufsf_feature *ufsf = &hba->ufsf;
int ret, lun;
u32 status;
ufsf->slave_conf_cnt = 0;
ufsf->hba = hba;
ufshcd_query_attr(ufsf->hba, UPIU_QUERY_OPCODE_READ_ATTR,
QUERY_ATTR_IDN_SUP_VENDOR_OPTIONS, 0, 0, &status);
INIT_INFO("UFS FEATURE SELECTOR Dev %d - D/D %d", status,
UFSFEATURE_SELECTOR);
ret = ufsf_read_dev_desc(ufsf, UFSFEATURE_SELECTOR);
if (ret)
return;
ret = ufsf_read_geo_desc(ufsf, UFSFEATURE_SELECTOR);
if (ret)
return;
seq_scan_lu(lun) {
ret = ufsf_read_unit_desc(ufsf, lun, UFSFEATURE_SELECTOR);
if (ret == -ENOMEM)
goto out_free_mem;
}
/* huangjianan@TECH