持久内存与安全机制 - 第360页
NVME2.0协议解读 1 min read

持久内存与安全机制 - 第360页

Blog Author

我们继续用中文深入解读 NVMe Base Specification 2.0b 第 349 页中关于 Capacity Management 的关键机制,特别是:

🧠 容量调整因子(Capacity Adjustment Factor) 🧰 Endurance Group 和 NVM Set 的创建与删除流程


🧮 1. 容量调整因子(Capacity Adjustment Factor)


📌 定义:

Capacity Adjustment Factor = INTEGER((Consumed Capacity / Total Endurance Group Capacity) × 100)
  • 该因子用于反映:

    创建一个 Endurance Group 时,从控制器视角看它消耗了多少“未分配的 NVM 容量”

🧾 举个例子:

如果 Capacity Adjustment Factor 为 200,你打算创建一个 5 GiB 容量的 Endurance Group

那么你会实际从控制器的 Unallocated NVM Capacity 里消耗:

5 GiB × 200% = 10 GiB

即你要牺牲更多底层物理资源才能换得逻辑容量,可能是为了冗余、垃圾回收、内部维护等。


🏗️ 2. Endurance Group 的创建流程(原子操作)


一旦你请求创建一个 Endurance Group,控制器会立即且不可中断地执行以下步骤:

🧱 步骤如下:

  • a) 从控制器的 UNVMCAP 字段中 扣除实际消耗容量
  • 扣除值 = 你请求的容量 × Capacity Adjustment Factor(再四舍五入到分配粒度)
  • b) 将新 Endurance Group 的 ID 加入到 Endurance Group List

🧹 3. Endurance Group 的删除流程(顺序操作)


删除不是原子过程,而是一系列按顺序执行的清理操作

🧹 步骤如下:

  1. 从 Endurance Group List 中移除该 Group 的 ID
  2. 若支持 Media Unit Status 日志,则将该 Group ID 从所有相关的 Descriptor 中清除(设为 0h)
  3. 删除该 Group 中的所有 NVM Set
  4. 将 TEGCAP(Total Endurance Group Capacity)对应的值加回 UNVMCAP 中

⚠️ 注意:如果你在这些步骤执行过程中访问相关结构,结果将是未定义的(indeterminate)。


📦 4. NVM Set 的创建流程(原子操作)


同样是原子过程,意味着创建过程不可分割:

🧱 步骤如下:

a) 向 NVM Set List 中添加新的 NVM Set ID
b) 从所属 Endurance Group 的 Unallocated Endurance Group Capacity扣除分配的容量

⚠️ 控制器可能会 向上取整 分配容量,基于其自身的最小分配单元。


🧹 5. NVM Set 的删除流程(顺序操作)


删除一个 NVM Set 是一个涉及多个实体的清除过程:

🧹 步骤如下:

  1. 从 NVM Set List 中移除该 Set ID
  2. 如果支持 Media Unit Status 日志,则清除所有与该 Set 相关的描述符内容
  3. 对于该 Set 下的每个 Namespace
  4. a. 所有命令按“Namespace 删除规则”处理(见第 8.11 节)
  5. b. Namespace ID 从 Allocated List 中移除
  6. c. 删除 Namespace 本体
  7. d. 将 Namespace ID 加入 Changed Namespace List
  8. e. 向其它主机发送 Namespace Attribute Changed 异步事件
  9. 将该 NVM Set 的容量加回 Endurance Group 中的未分配容量

🧠 总结整理

项目 是否原子操作 涉及资源 额外事件/通知
创建 Endurance Group ✅ 是 UNVMCAP
删除 Endurance Group ❌ 否 多级结构
创建 NVM Set ✅ 是 Endurance Group 内的容量
删除 NVM Set ❌ 否 多结构 & Namespace 清理 ✅ 发异步事件通知其它主机

如你想继续了解下一节(例如进入 Endurance Group 的命令结构、或 Capacity Management 的命令流程),我可以继续中文方式为你详细解读。需要我继续吗?📘