高级特性 - Host Memory Buffer (HMB) 结构 (第310页)
在 NVM Express® Base Specification, revision 2.0b 中,Host Memory Buffer (HMB) 的具体实现和数据结构继续深入讲解,尤其是在与主机内存描述符列表(Host Memory Descriptor List)相关的部分。以下是关于 HMB 进一步细节的深入分析:
Host Memory Buffer (HMB) 结构
Host Memory Descriptor List
- Host Memory Descriptor List 是一个数据结构,它描述了主机内存缓冲区的位置和长度。这些描述符是由多个内存页大小(根据控制器配置的
CC.MPS)的地址和长度对组成。 - 描述符列表中的每一项都包含:
- Buffer Size (BSIZE):描述缓冲区大小,单位是内存页大小(
CC.MPS)。 - Buffer Address (BADD):指向缓冲区的物理内存地址,这个地址必须是与内存页大小对齐的(例如,如果内存页大小是 4KB,那么
BADD字段的最低 12 位将为 0)。
描述符列表与内存对齐要求
- 内存页对齐:每个缓冲区描述符必须符合内存页大小的对齐要求。例如,如果内存页大小为 4KB,则每个内存地址字段(
BADD)的最低 12 位必须为 0。 - 这意味着任何描述符中的 Buffer Address (BADD) 字段,都必须是内存页大小的整数倍。
数据结构细节
命令字 13 (Command Dword 13)
- Host Memory Descriptor List Lower Address (HMDLLA):
- 这个字段指定了 Host Memory Descriptor List 的物理位置的最低 32 位。地址必须是 16 字节对齐 的,这意味着该地址必须满足内存对齐要求。
命令字 14 (Command Dword 14)
- Host Memory Descriptor List Upper Address (HMDLUA):
- 这个字段指定了 Host Memory Descriptor List 的物理位置的最高 32 位。该地址也需要与内存页面大小对齐。
命令字 15 (Command Dword 15)
- Host Memory Descriptor List Entry Count (HMDLEC):
- 该字段指定 Host Memory Descriptor List 中条目的数量。每个条目描述了主机内存缓冲区的一个地址和长度对。
Host Memory Descriptor List 结构
- 描述符条目:
- 每个 Host Memory Buffer Descriptor Entry 包含两部分:
- Buffer Size (BSIZE):描述缓冲区大小,单位是内存页大小(
CC.MPS)。 - Buffer Address (BADD):描述缓冲区的物理内存地址,必须与内存页大小对齐。
- Buffer Size (BSIZE):描述缓冲区大小,单位是内存页大小(
关键点总结
-
内存对齐要求:对于每个内存页的地址(
BADD字段),必须是内存页大小的整数倍。例如,若内存页为 4KB,则BADD字段最低 12 位必须为 0。 -
描述符列表功能:每个 Host Memory Descriptor List 描述符提供一个地址和长度对,用于指定控制器可以访问的内存区域。这些描述符是以 64 位单位存储的,必须按内存页对齐。
-
主机内存缓冲区的操作:
- 主机可以启用或禁用主机内存缓冲区(HMB)。在启用时,控制器可以使用该内存区域进行操作,而禁用时,控制器不再访问该区域,直到再次启用。
-
在主机内存缓冲区启用后,主机不能修改描述符列表,直到禁用该功能。
-
命令字字段:通过 命令字 13 到 命令字 15,可以指定主机内存描述符列表的位置和条目数。这些字段帮助定义控制器如何访问和使用主机分配的内存区域。
通过这一系列的命令字段和内存对齐要求,NVM Express 确保了主机内存缓冲区的安全性和高效性,为存储设备提供了灵活且高效的内存管理机制。