持久内存 - ✅ 结构总览 (第374页)
NVME2.0协议解读 1 min read

持久内存 - ✅ 结构总览 (第374页)

Blog Author

我们继续深入学习并逐字段解读 NVMe 2.0b 规范第 363 页,Figure 425:Streams Directive – Return Parameters Data Structure,这一部分是 Streams 指令机制的关键内容,涉及子系统、命名空间、主机间的资源划分与状态查询。


✅ 结构总览

该结构由 Directive Receive + Operation 01h (Return Parameters) 返回,分为:

  • NVM Subsystem 全局字段(整体资源池信息)
  • Namespace 专属字段(每个命名空间配置)
  • Namespace + Host ID 特定字段(Stream 资源分配状态)

🧩 字段详细解析

🔷 字节 06: NSSC - NVM Subsystem Stream Capability

Bit 含义
7:1 Reserved
0 若为 0,则 stream ID 属于单一 Host Identifier
若为 1,则 stream ID 可以跨多个 host 共享。

📌 影响 stream 唯一性语义,决定跨控制器/主机访问是否共享 stream 状态。


🔷 字节 15:07 Reserved

保留,当前未定义使用。


📦 命名空间级字段(针对 NSID)

🔷 字节 19:16: SWS - Stream Write Size

  • 指定该命名空间的 最优 stream 写入大小对齐单位
  • 单位由 I/O Command Set 决定,如常见的 4KiB 块大小。
  • 应 ≤ MDTS(最大传输单元)。
  • 若 NSID=FFFFFFFFh,可能返回 0(无法统一表示)。

📌 主机使用该对齐单位发起写入,可显著提升性能和媒体耐久度。


🔷 字节 21:20: SGS - Stream Granularity Size

  • 指定每次流分配使用多少写入单元(以 SWS 为单位)。
  • 是分配粒度,比如每个流预分配 8 个 SWS 大小的空间。
  • 越大可能越有利于数据局部性和垃圾回收。

👤 命名空间 + Host Identifier 特定字段

🔷 字节 23:22: NSA - Namespace Streams Allocated

  • 表示该命名空间已为特定主机独占分配的 stream 资源数。
  • 上限是同时可用的 stream 数。
  • 如果是 0,说明该 namespace 仅可使用共享资源(NSSA)。

NSSC.bit0 配合解释:

NSSC.bit0 NSA 表示谁的独占资源?
0 当前 Host Identifier 的控制器们
1 所有非零 Host Identifier 共享

🔷 字节 25:24: NSO - Namespace Streams Open

  • 当前 host + controller 对指定命名空间实际已打开的 stream 数量。
  • 用于判断资源是否耗尽,是否需要 Release Identifier

📌 ⚠ 此值仅统计当前 Host 的使用情况,不可用于查看其他 host 的使用。


🔒 字节 31:26 Reserved

未定义,保留未来使用。


🧠 知识小结图示

+------------------------+------------------+---------------------------+
|        字段            |     类型         |           含义            |
+------------------------+------------------+---------------------------+
| MSL, NSSA, NSSO        | 子系统全局        | 最大/剩余/当前 stream 情况 |
| NSSC.bit0              | 访问策略         | 是否允许跨 Host ID 共享     |
| SWS, SGS               | Namespace 配置   | 最优对齐单位与分配粒度     |
| NSA                   | 独占资源上限     | 当前 Host 在该命名空间可用 |
| NSO                   | 实际开启数量     | 当前 Host + 控制器已开流数 |
+------------------------+------------------+---------------------------+

🚀 下一步建议

我们可以继续深入第 364 页,分析:

  • Directive ReceiveOperation 02hGet Status
  • 返回当前打开的 stream identifier 列表,对调试和流管理极为重要。

是否需要我继续带你往下学习 Get Status 操作 的结构与用法?