高级特性 - Host Memory Buffer (HMB) 结构 (第310页)
NVME2.0协议解读 1 min read

高级特性 - Host Memory Buffer (HMB) 结构 (第310页)

Blog Author

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 包含两部分:
    1. Buffer Size (BSIZE):描述缓冲区大小,单位是内存页大小(CC.MPS)。
    2. Buffer Address (BADD):描述缓冲区的物理内存地址,必须与内存页大小对齐。

关键点总结

  • 内存对齐要求:对于每个内存页的地址(BADD 字段),必须是内存页大小的整数倍。例如,若内存页为 4KB,则 BADD 字段最低 12 位必须为 0。

  • 描述符列表功能:每个 Host Memory Descriptor List 描述符提供一个地址和长度对,用于指定控制器可以访问的内存区域。这些描述符是以 64 位单位存储的,必须按内存页对齐。

  • 主机内存缓冲区的操作

  • 主机可以启用或禁用主机内存缓冲区(HMB)。在启用时,控制器可以使用该内存区域进行操作,而禁用时,控制器不再访问该区域,直到再次启用。
  • 在主机内存缓冲区启用后,主机不能修改描述符列表,直到禁用该功能。

  • 命令字字段:通过 命令字 13命令字 15,可以指定主机内存描述符列表的位置和条目数。这些字段帮助定义控制器如何访问和使用主机分配的内存区域。

通过这一系列的命令字段和内存对齐要求,NVM Express 确保了主机内存缓冲区的安全性和高效性,为存储设备提供了灵活且高效的内存管理机制。