NVMe HMB

目录

简介

详细描述

应用场景

使用方式

HMB 回收时机

注意事项

相关配置

Identify Controller

HMPRE

HMMIN

HMMINDS

HMMAXD

Set Features

Host Memory Buffer (Feature Identifier 0Dh), (Optional)

Dword 11

Memory Return(MR)

Enable Host Memory (EHM)

Dword 12

Host Memory Buffer Size (HSIZE)

Dword 13 & Dword 14

Host Memory Descriptor List Lower Address (HMDLLA)

Host Memory Descriptor List Upper Address (HMDLUA)

Dword 15

Host Memory Descriptor List Entry Count (HMDLEC)

Command Completion

异常回报示例

Host Memory Descriptor List

Buffer Address (BADD)

Buffer Size (BSIZE)

Get Features


简介

HMB,全称 Host Memory Buffer。简单来说,就是 NMVe 协议提供了一种可选机制让 host 可以分配一部分内存给 SSD 控制器独自使用。

当然,host 可能无法提供任何 HMB 或只能提供一小部分 HMB。但 SSD 要能包容这种情况,即使没有 HMB 也要能正常工作。因为协议规定 HMB 也只是一个可选项,SSD 并非必须支持。可以这么说,HMB 算是一种锦上添花的机制,但当前 HMB 已经得到广泛的应用。尤其 DRAM-less 的 SSD ,如果想要取得足够的市场竞争力,应该是必须支持 HMB 的。

本文主要参考协议规范 NVMe 1.4 版本。

详细描述

应用场景

最为重要的应用场景当属 DRAM-less 的SSD。由于价格和成本,该类 SSD 内部可用 RAM 非常小,此时 HMB 对它的帮助就尤为突出。通过 HMB 的帮助,SSD 可以拥有更好的性能表现。

HMB 在其中可以作为:

  1. 数据缓存区
  2. 算法映射表缓存区

使用方式

  1. host 通过 Identify controller 命令了解 SSD 对 HMB 的诉求。
  2. 根据诉求,host 决定是否使能 HMB。如果要使能,则通过 Set Features(详见本文的相关配置)把分配的 HMB 信息告诉 SSD,同时使能 HMB。
  3. 分配后,host 保证不修改这些已分配的 HMB,以及 Host Memory Descriptor List(详见相关配置)。只有 SSD 可以自由使用 HMB。SSD 负责初始化 HMB。
  4. HMB 回收时,host 通过 Set Features 命令来让 SSD 归还 HMB。SSD 回复 Set Features CQ 后,就不能访问 HMB 了。所以 SSD 在回复 CQ 之前,一定要保证所有访问 HMB 的事件都已完成。

HMB 回收时机

  1. host 发生 shutdown
  2. host 发生 Runtime D3 event
  3. host 发生任何需要回收分配内存的事件

注意事项

  1. 如果 host 分配 HMB 时,无视相关配置的限制,则分配给 SSD 的 HMB 可能无法被充分利用。比如,当 descriptor entries 超出最大数目限制,超出部分可能会被 SSD 忽略掉。
  2. 在 Runtime D3 时,host 应再次提供 HMB,同时告知 SSD,提供的 HMB 在进 RTD3 之前已经被使用,且没有被修改。
  3. 在 reset 期间,HMB 不会保持存在。在 reset 完成后,host 应该将之前分配的 HMB 重新提供给 SSD。
  4. 如果 host 将之前分配的 HMB 原封不动地重新提供给 SSD,即保持 HMB 内存位置不变,保持 HMB 上的数据内容不变,保持 Host Memory Descriptor List 不变,则在 Set Features 命令中,Memory Return 的 bit 设置为“1”。
  5. SSD 需保证当 HMB 被意外移除时,不会发生数据丢失和数据错误的情况。
  6. 如果 HMB 已经使能了,此时下发一条 enable HMB 的 Set Features 命令应该要被 abort 掉,且回报 Command Sequence Error 的状态码。
  7. 如果 HMB 未使能,此时下发一条 disable HMB 的 Set Features 命令,无需采取任何操作,回报成功完成。

相关配置

Identify Controller

HMPRE

全称 Host Memory Buffer Preferred Size,该字段表示 HMB 首选大小,该大小以 4 KiB 为单位,是 SSD 对 host 提出的诉求。

该值应大于等于 HMMIN。

若该字段不为 0,则支持 HMB。如果该字段为 0,则不支持 HMB。

当前常见配置为 0x1000 和 0x4000,即 16 MB 和 64 MB。欲知更多配置,可去查阅各产品规格说明书。

HMMIN

全称 Host Memory Buffer Minimum Size,该字段表示 HMB 最小大小,该大小以 4 KiB 为单位,是 SSD 对 host 提出的诉求。

若该字段为 0,则 host 被请求分配尽可能多的 HMB,直到达到 HMPRE 的值。

当前常见配置是与 HMPRE 保持一致,也有单独设定一个比 HMPRE 小的值。

HMMINDS

全称 Host Memory Buffer Minimum Descriptor Entry Size,该字段表示 HMB Descriptor Entry 中分配的 HMB 最小可用大小,以 4 KiB 为单位。用于限制 host 分配 HMB 的离散度。

如果该字段为 0,则控制器没有指明对 HMB Descriptor Entry 中分配的 HMB 大小限制。

该字段为 NMVe 1.4 相较于 NMVe 1.3 的新增字段。

HMMAXD

全称 Host Memory Maximum Descriptor Entry Size,该字段表示 HMB Descriptor Entry 的最小可用数目,以 4 KiB 为单位。

如果该字段为 0,则控制器没有指明对 HMB Descriptor Entry 的最大数目限制。

该字段为 NMVe 1.4 相较于 NMVe 1.3 的新增字段。

Set Features

Host Memory Buffer (Feature Identifier 0Dh), (Optional)

这个 Feature 用于控制 HMB,通过 Command Dword 11,Command Dword 12,Command Dword 13,Command Dword 14 和 Command Dword 15 进行设定。

Dword 11
Memory Return(MR)

设定为 1 :表示将上一次使用的 HMB 重新分配给 SSD,无论是大小、位置、内容等等,均保持一致。

设定为 0 :表示分配一个全新的 HMB 给 SSD。

Enable Host Memory (EHM)

设定为 1 :表示开启 HMB 功能,SSD 可以使用 HMB。

设定为 0 :表示关闭 HMB 功能,SSD 无法使用 HMB,且 SSD 应该忽略 Command Dword 12~Command Dword 15 的字段描述。

Dword 12
Host Memory Buffer Size (HSIZE)

表示分配的 HMB 总大小,单位根据 CC.MPS 而定,常见就是以 4K 为单位。

Dword 13 & Dword 14
Host Memory Descriptor List Lower Address (HMDLLA)

表示存放 Host Memory Descriptor List 的物理地址的低 32 位。

注意:这个地址需要 16 byte aligned,且 bits 3:0 被清 0。但 SSD 不需要检查 bits 3:0 是否被清 0,SSD 只需要当做 bits 3:0 为 0 即可。

Host Memory Descriptor List Upper Address (HMDLUA)

表示存放 Host Memory Descriptor List 的物理地址的高 32 位。

Dword 15
Host Memory Descriptor List Entry Count (HMDLEC)

表示有多少个 Host Memory Descriptor List。

Command Completion

当 SCT 为 1h 时,即 Status Code Type 为 Command Specific Status 时,Status Code 的定义参考下图。

异常回报示例

当 Set Features 中的字段配置不在 Identify Controller 的配置限制范围内时,CQ 会回报 SCT 为 0h,SC 为 02h,M 为 1h。

即 Status Code Type 为 Generic Command Status;Status Code 为 Invalid Field in Command;More 为 1,表示更多的 error information 需通过 Get Log Page command 去获取。

当然协议规范只是协议规范,不代表各家产品就完全参照规范实现。

Host Memory Descriptor List

Buffer Address (BADD)

表示当前 Descriptor 分配哪一段内存地址作为 HMB。该字段的 lower bits(n:0)说明了内存页大小的偏移,比如内存页大小为 4KiB,则 bits 11:00 应为 0;内存页大小为 8KiB,则 bits 12:00 应为 0。

Buffer Size (BSIZE)

表示当前 Descriptor 分配了多大的内存作为 HMB。单位根据 CC.MPS 而定。

Get Features

可以获得如下信息,这里不做赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值