存储

关注公众号 jb51net

关闭
硬件教程 > 存储 >

固态硬盘里的HMB主机内存缓冲区是什么? NAND Flash介绍

脚本之家

科技进步的背后有一条真理:发明者和工程师们首先理解并实现新技术的基础原理,接着才去考虑如何在性能和成本上做进一步优化。这个原则在 SSD 固态存储领域同样适用,也就是人们常说的从实验室到量产阶段。

接下来,我们将介绍一项近年来固态硬盘技术的重要进展——主机内存缓冲区 (Host Memory Buffer,HMB),它利用主机内存来提升存储设备性能,推动了固态硬盘技术的进一步发展。

SSD 缓存设计的权衡因素

在固态硬盘 (SSD) 设计中,增加 NAND Flash 存储单元(闪存颗粒)可以提升容量和性能。然而,正如所有产品设计一样,工程师需要在资源和成本之间找到平衡。

目前,有两种主要方式可以提升存储单元的现有性能:一是提升 NAND Flash 密度,二是增加额外的闪存颗粒,但这会占用更多物理空间。由于硬盘的 PCB 空间都有限,增加闪存颗粒通常意味着就要减少其他元件。

有缓方案(DRAM)

DRAM 代表动态随机存取存储器,该闪存模块安装在固态硬盘的印刷电路板 (PCB) 上,用于存储数据映射表,这些表记录了所有的逻辑块及其物理位置。简单来说,DRAM 让固态硬盘能够更快处理随机数据请求,还用于缓存写入数据,提高写入性能。但 DRAM 会显著提高 SSD 的成本,它的成本可能是普通 NAND Flash 的数倍。

无缓方案(没有 DRAM)

为了降低成本,目前,许多厂商选择移除快速但昂贵的 DRAM,也就是人们常说的「无缓方案」。然而,DRAM 是一种高速的易失性存储器,并不能被轻易取消。没有 DRAM 的设计在数据传输,尤其是处理高容量随机读取时,会面临性能下降和信号完整性的挑战。DRAM 的存在能让数据访问更快,缺少它可能会显著影响硬盘的整体性能。

什么是 HMB 主机内存缓冲区

那么,工程师要如何解决无缓 SSD 的性能问题呢?简单来说,就是使用 HMB(主机内存缓冲区)技术。HMB 允许 SSD 利用主机的内存资源,主动提升性能。

为 SSD 分配主机内存

NVMe 1.2 规范首次引入了 HMB 功能,规定了 HMB 如何将主机内存分配给 SSD 使用:

HMB 通常用于存储 FTL(Flash Translation Layer)映射表,而不是直接存储用户数据。

为什么选择 HMB?从有缓到无缓 SSD

早期的 SSD 设计中,同时使用了非易失性闪存和易失性 RAM 来提高数据处理效率。具体来说,DRAM 设备被用作缓冲区,主要有两个原因:

缓存中最关键的信息是逻辑地址到物理存储位置的映射,即 L2P(逻辑到物理)表。该表会随着 SSD 的读写频繁更新:

DRAM 缓存空间越大,通常意味着更灵活的数据管理和更快的响应速度,特别是在处理「随机读取」任务时。

SSD 有 DRAM 缓存运行机制

然而,DRAM 是一种按密度计算的昂贵资源,价格通常是 NAND Flash 的数倍左右,而且短期内也不会改变。因此,尽管 DRAM 具备显著优势,但过去十来年,无 DRAM 的 SSD 也逐渐开始流行。这些 SSD 体积小、成本低,但因缓存空间受限,对 SSD 性能也会有所影响。

无缓 SSD 也将 L2P 表保存在 NAND Flash 中,当控制器需要访问 L2P 表时,会将表加载到控制器的内部 SRAM 中进行更新,然后再次存储在 NAND Flash 中。

无 DRAM 和无 HMB 的 SSD 缓存操作机制

然而,SRAM 的成本更高,容量也较小,典型的 Flash 控制器也只有几兆字节的 SRAM,因此无缓 SSD 的性能通常不如有缓设计。

无 DRAM 和有 HMB 的 SSD 缓存操作机制

这也正是 HMB 技术诞生的根本原因。HMB 允许 SSD 将 L2P 表从 NAND Flash 加载到主机内存中,并通过主机不断刷新缓存,这种「神操作」跟 DRAM 的方法十分相似。

启用了 HMB 的 SSD 在处理随机工作负载时,性能损失并不明显。接下来,我们将展示一些实际测试数据,看看 HMB 对 SSD 性能的影响。

有无 HMB 性能提升对比

在启用 HMB 后,SSD 在「随机读取」操作时的性能会得到显著提升。然而,HMB 的性能提升也会因为工作负载的不同而有所变化。这是因为:主机不总能提供足够的内存空间给 NAND Flash 控制器来使用。

「随机读取」指的是控制器根据主机请求,从 NAND Flash 中不规则的位置提取特定大小的数据。

以下图表展示了在不同工作负载下,使用 HMB 后,数据处理从 1 GB 到 32 GB 时的性能非线性提升:

1GB 数据随机读取

8GB 数据随机读取

32GB 数据随机读取

IOPS(每秒输入/输出操作)是衡量存储设备性能的关键指标,直接反映了设备处理数据请求的速度。

如何在 Windows 中使用 HMB

如前所述,要使用 HMB 功能,需要你使用的 SSD 和操作系统同时支持。通常情况下:

如果你安装了 SSD 厂商的官方硬盘驱动或管理程序,通常可以看到是否支持并启用 HMB 功能,这个需要你自己去探索使用;如果你没有安装 SSD 厂商的应用,Windows 会使用系统自带的 StorNVMe 存储控制器驱动程序,该驱动的 HMB 容量上限默认为 64MB。

你可以通过更改注册表,来调整 HMB 容量:

1、使用Windows + R快捷键打开「运行」对话框,执行regedit打开注册表编辑器。

2、导航到以下路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorPort

3、新建一个名为HmbAllocationPolicy的 DWORD (32 位) 值 ,并将其值设置为:

设置 HmbAllocationPolicy 注册表值