持久内存 - 我们现在继续学习 NVMe 2.0b 规范第 359 页的内容,聚焦两个关键点: (第370页)
NVME2.0协议解读 1 min read

持久内存 - 我们现在继续学习 NVMe 2.0b 规范第 359 页的内容,聚焦两个关键点: (第370页)

Blog Author

我们现在继续学习 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 = Streams00h = 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 程序逻辑非常关键。