高级特性 - Host Memory Buffer(HMB)功能概述 (第309页)
NVME2.0协议解读 1 min read

高级特性 - Host Memory Buffer(HMB)功能概述 (第309页)

Blog Author

NVM Express® Base Specification, revision 2.0b 中,Host Memory Buffer (HMB) 功能是一个可选的特性,它为主机提供了一种机制,将主机内存的一部分分配给控制器专用。这个内存区域可以由控制器独立使用,但在启用或禁用过程中需要特定的步骤和限制。下面是对 Host Memory Buffer (HMB) 功能的详细解析:

Host Memory Buffer(HMB)功能概述

  • Host Memory Buffer 允许控制器将一部分主机内存作为专用内存区域使用。启用此功能后,主机不能修改该内存区域,直到该功能被禁用。

工作原理

  1. 启用 HMB
  2. 当主机发送 Set Features 命令启用 HMB 时,控制器可以开始使用该内存区域。如果此时已存在与 HMB 相关联的主机内存区域,主机无法再次修改内存区域的内容,直到禁用该功能。

  3. 禁用 HMB

  4. 如果主机发送 Set Features 命令来禁用 HMB,控制器会停止访问主机内存区域,直到再次启用该功能。禁用时,控制器应首先从内存缓冲区检索所需的数据,然后才能允许主机修改该内存内容。

命令和字段描述

命令字 11 (Command Dword 11)

  • Memory Return (MR)
  • 如果设置为 1,表示主机正在返回之前为控制器分配的内存,这块内存可能在重置后或者进入运行时 D3 状态时已被使用。如果返回的内存完全符合上次禁用 HMB 时的状态(大小、描述符列表地址及其内容),则可以安全恢复。
  • 如果设置为 0,表示主机正在为控制器分配新的内存资源,且此内存内容未定义。

  • Enable Host Memory (EHM)

  • 如果设置为 1,则启用主机内存缓冲区,控制器可以开始使用该内存区域。
  • 如果设置为 0,则禁用主机内存缓冲区,控制器将不再使用该内存区域。如果禁用 HMB,控制器将忽略命令字 12、13、14 和 15。

命令字 12 (Command Dword 12)

  • Host Memory Buffer Size (HSIZE)
  • 该字段指定主机内存缓冲区的大小,单位为内存页大小(根据 CC.MPS 字段的设置)。

工作流程总结

  1. 启用 HMB:主机通过设置 EHM 为 1 来启用主机内存缓冲区,控制器可以开始使用这块内存。如果启用过程中存在已分配的内存,主机通过设置 MR 为 1 来返回先前使用的内存。

  2. 禁用 HMB:当主机通过设置 EHM 为 0 来禁用主机内存缓冲区时,控制器停止使用这块内存,并且无法再次访问这些内存区域,直到功能重新启用。

  3. 修改 HMB 内容:只有在禁用 HMB 后,主机才能修改这块内存的内容。

  4. 内存分配的粒度:分配的主机内存的大小是按照内存页大小的单位来指定的(通过 HSIZE 字段定义)。

交互与限制

  • 启用与禁用的限制
  • EHM 设置为 1 时,如果主机尝试通过 Set Features 命令启用 HMB,而此时已经启用了该功能,则命令将被拒绝,并返回 命令序列错误(Command Sequence Error)
  • 如果主机想禁用 HMB,只需设置 EHM 为 0,此时控制器将不再使用该内存区域。

总结

Host Memory Buffer (HMB) 是一种为控制器分配主机内存的功能,允许控制器在不依赖于本地存储的情况下操作大容量数据。当启用时,主机无法直接操作该内存内容,直到禁用此功能。它为存储设备提供了灵活的内存管理机制,确保在设备运行中能够安全且高效地处理内存资源。