持久内存 - ✅ 结构总览 (第374页)
我们继续深入学习并逐字段解读 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 Receive的Operation 02h:Get Status- 返回当前打开的 stream identifier 列表,对调试和流管理极为重要。
是否需要我继续带你往下学习 Get Status 操作 的结构与用法?