持久内存 - 我们现在继续学习 NVMe 2.0b 规范第 359 页的内容,聚焦两个关键点: (第370页)
我们现在继续学习 NVMe 2.0b 规范第 359 页的内容,聚焦两个关键点:
✳️ 一、启用指令操作格式(Enable Directive – Command Dword 12)
该部分定义了当主机发送 Directive Send 命令、并设置 Directive Operation = 01h(Enable Directive)时,第 12 个双字(Dword 12)的字段解释。
📌 Figure 420:字段结构说明
| 位段范围 | 字段 | 说明 |
|---|---|---|
| 31:16 | 保留位 | 不使用,必须填 0 |
| 15:08 | DTYPE (Directive Type) | 指定要启用或禁用的 Directive 类型: 例如 01h = Streams,00h = Identify。若设置为 00h(Identify),则返回状态码:Invalid Field in Command(因为 Identify 是永远启用的) |
| 07:01 | 保留位 | 不使用,必须填 0 |
| 00 | ENDIR (Enable Directive) | 指示是否启用该 Directive:1 = 启用(Enable)0 = 禁用(Disable)如果试图启用不被支持的 Directive,也将返回 Invalid Field in Command |
🌀 二、Streams Directive(流式指令)介绍(DTYPE = 01h,属于 Optional)
🔍 Streams 是做什么的?
Streams Directive 允许主机在写数据时指明:这些数据是属于一个“逻辑相关的数据流”(stream)。控制器据此:
- 可以将属于同一个 stream 的数据写入更接近的位置;
- 实现数据布局优化;
- 提升写入性能;
- 降低写放大(Wear Leveling 改善);
- 改善设备耐久性。
🧱 Key 参数:
| 名称 | 缩写 | 含义 |
|---|---|---|
| Stream Write Size | SWS | 一次写入操作的推荐粒度。数据应当对齐且是 SWS 的整数倍,才能获得最优性能 |
| Stream Granularity Size | SGS | 控制器一次为 stream 准备的连续空间大小,是 SWS 的倍数。对齐 & 对块释放优化时使用 |
| Stream ID | 无 | 主机通过 DSPEC 字段传入的 stream 标识符。用于区分不同逻辑流 |
📊 Figure 421 图示说明(Streams 对齐方式)
完整的 stream 由若干 SGS 组成,每个 SGS 中又有多个 SWS:
SGS1 SGS2 SGS3
|--------|--------|--------|
|SWS|SWS|SWS|SWS|...|SWS|SWS|
实际意义:如果你把数据写成 SWS 大小一块块的,控制器能以 SGS 为单位分配物理存储资源,这样写入更高效、磨损更少。
🧠 Streams 使用建议:
- 在执行 Dataset Management – Deallocate 命令 时,如果是 deallocate 某个 stream 的逻辑块,建议 LBA 起始地址和长度应:
- 对齐到 SGS 大小
- 并是 SGS 的整数倍
- 这会显著提高设备的清理效率与性能。
🎯 Stream Resource 管理
控制器每处理一个“流”都需要使用一部分内部资源,称为 Stream Resource。资源有限:
- MSL(Max Stream Limit):控制器支持的最大流数量;
- NSSA(NVM Subsystem Streams Available):当前系统中未被某个 namespace 独占的 stream resource 数量;
- 某些 namespace 可请求独占流资源(exclusive),对应配置见 NSSC(NVM Subsystem Stream Capabilities)。
✅ 使用 Streams 的前提条件
要想使用流:
- 命名空间必须启用了 Streams Directive;
- 如果想用“系统共享资源”,就不能已被设置为“独占资源”状态;
- 主机要通过 DSPEC 指定 stream ID(非 0);
- 如果 DSPEC = 0,则该命令等价于没有使用 Streams(兼容传统命令)。
📌 小结一页知识点
| 项目 | 说明 |
|---|---|
| Streams Directive | 主机告诉控制器哪些数据是同一类数据流,以便优化写入性能 |
| DTYPE | 设置为 01h 表示启用流机制 |
| DSPEC | 表示该写入命令所归属的流 ID |
| 对齐要求 | SWS 对齐与 SGS 对齐是性能优化关键 |
| Resource 管理 | NSSA 表示系统共享资源数,MSL 为总限制,按需配置独占或共享 |
接下来将进入 Figure 422 及后续内容(如 Streams 参数返回结构定义、资源分配/追踪结构体等),是否继续为你展开讲解?这部分对构建优化型 NVM 程序逻辑非常关键。