控制器寄存器 - 📌 一、NVM Set 是什么? (第85页)
NVME2.0协议解读 1 min read

控制器寄存器 - 📌 一、NVM Set 是什么? (第85页)

Blog Author

下面是对 NVMe Base Specification revision 2.0b 中关于 NVM Set 与 Endurance Group 的内容进行的中文深入分析与讲解,帮助你理解其设计思路与使用逻辑:


📌 一、NVM Set 是什么?

NVM Set(非易失性内存集) 是 NVMe 规范中的一种逻辑划分单位,旨在实现对底层存储资源(如 Flash、SCM)的更细粒度的分区与管理。每个 NVM Set 通常具备如下特性:

  • 属于 某一个 Endurance Group
  • 与 Namespace 创建与管理密切相关
  • 可能具有自己的写入优化参数等属性(如 Optimal Write Size)

📌 二、NVM Set 的使用规则(规范要求)

✅ 合法使用方式:

  1. 主机在使用需要 NVM Set Identifier 的命令时,必须指定非 0h 的合法值
  2. 创建 Namespace 时,必须指定该 Namespace 应该属于哪个 NVM Set
  3. 所有支持 NVM Set 的 Controller,都必须在 Identify Controller 数据结构中表明支持,并符合以下要求:

  4. Identify Controller 中的 Controller Attributes 字段应设置支持 NVM Set;

  5. 在所有使用 NVM Set Identifier 的命令中,都必须支持该字段;
  6. Identify Namespace 数据结构中,必须指明 Namespace 所关联的 NVM Set;
  7. 同时,Controller 也应支持 Endurance Group 并维护 NVM Set 与 Endurance Group 的对应关系。

❌ 错误用法(命令会被拒绝):

  • 如果主机在发起命令时将 NVM Set Identifier 设置为 0h,那么该命令将被 以“Invalid Field in Command”错误终止
  • 如果 Controller 不支持 NVM Sets(即 Identify Controller -> CTRATT.NVM Sets bit = 0),那么所有命令中的 NVM Set Identifier 字段必须被强制设为 0h

📌 三、Endurance Group 是什么?

Endurance Group(耐久性组) 是 NVMe 中用于管理闪存写入寿命、负载均衡和资源分配的机制。它是一组 NVM Set 的集合,负责以下功能:

  • 跨多个 NVM Set 管理写入耐久性
  • 每个 Endurance Group 只属于一个 Domain(电源、故障域等)

Endurance Group Identifier 特性:

  • 是一个 16-bit 的标识符
  • 0h 是保留值,不能作为合法 ID 使用
  • 如果命令需要指定 Endurance Group,而却设为 0h,同样会以 "Invalid Field in Command" 错误终止

📌 四、NVM Set 与 Endurance Group 的关系图解(简化版本)

Endurance Group Y:
 ├── NVM Set A
 └── NVM Set B


Endurance Group Z:
 └── NVM Set C
  • 如果多个 NVM Set(如 A 和 B)共享同一个 Endurance Group(如 Y),那么其写入寿命与资源使用由整个 Endurance Group 协调。
  • 如果某个 NVM Set 是独占的(如 C 属于 Z,而 Z 仅包含 C),则其 Endurance 单独管理。

📘 补充:相关结构体与日志页(Log Page)

项目 说明
Identify Controller 指示是否支持 NVM Sets 和 Endurance Groups(CTRATT 字段)
Identify Namespace 指出 Namespace 属于哪个 NVM Set
Namespace Management 创建 Namespace 时指定目标 NVM Set
Endurance Group Information Log Page 查看某个 Endurance Group 的统计数据和属性信息(5.16.1.10节)

✅ 总结理解关键点:

  1. NVM Set 是 namespace 分配和管理的逻辑单位,每个 NVM Set 属于一个 Endurance Group。
  2. Endurance Group 是管理写入寿命的更高层级单位,可以覆盖多个 NVM Set。
  3. 如果使用相关字段时设置了无效值(如 0h),命令将以 Invalid Field 报错终止。
  4. 支持这些特性时,必须在对应 Identify 结构中正确声明与报告。

如果你需要我进一步分析 Identify Controller、Namespace Management 命令中具体结构体的字段与例子,我也可以为你逐字段剖析。你现在想继续深入哪一块内容?例如:

  • Namespace Management 命令的 NVM Set Identifier 字段如何设置?
  • Endurance Group Information 日志页结构详解?
  • 如何根据 Identify Controller 判断是否支持这些特性?

你可以告诉我具体方向,我来详细解释。