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

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

Blog Author

我们继续深入解析 NVMe 2.0b 规范第 364 页,完整理解 Streams Directive 的两个关键操作:


🔹一、Get Status(操作码 02h)

🎯 功能:

用于获取指定命名空间中 当前打开的流(Stream Identifier) 列表,是运行时资源可视化和调试的关键工具。


✅ 行为逻辑(依据 NSSC.bit0):

NSSC.bit0 Get Status 返回内容
0 仅返回与当前 Host Identifier 相同 的 Host 在该命名空间中打开的 stream
1 返回该命名空间中,所有非零 Host Identifier 打开的 stream

🧾 NSID 特殊值 FFFFFFFFh:

表示请求的是整个 NVM 子系统中共享资源(非独占)所打开的所有流信息

  • 如某 stream identifier 在多个 namespace 被使用,仅返回一次。
  • 不包含 NSA > 0 的命名空间中的独占资源使用。

📦 Figure 426:Get Status 返回结构

Bytes 含义
01:00 Open Stream Count:当前打开的 stream 数
03:02 Stream Identifier 1:编号最小的打开 stream
05:04 Stream Identifier 2:第二小的 stream
... 一直到最多 65,535 个 stream identifier

📌 主机可解析返回结构,判断哪些 stream 已经被使用,以免冲突或资源溢出。


🔸二、Allocate Resources(操作码 03h)

🎯 功能:

用于向控制器申请指定数量的 stream 资源,供 特定命名空间独占使用


✅ 行为逻辑(依据 NSSC.bit0):

NSSC.bit0 资源使用范围
0 限定为当前 Host Identifier 独享
1 所有 Host Identifier 共享

🧾 输入字段(Figure 427)

Dword Bits 字段 说明
12 15:0 NSR 申请分配的 stream 资源数量
31:16 保留

🎯 成功后的结果:

  • 控制器将在 Completion Queue Entry 的 Dword 0 中返回 实际分配的数量
  • 若无法完全满足请求,分配数量可能 < 请求数量。
  • 结果会立即反映在 Return ParametersNSA 字段中。

⚠️ 错误处理与限制:

情况 行为
资源不足 返回 Stream Resource Allocation Failed (7Fh)
namespace 已有 NSA > 0 返回 Invalid Field in Command
想要更多资源 必须先 Release Resources,再全量重新申请

🔚 小结:Stream 多主机制的资源管理重点

功能 操作码 使用命令 备注
查询当前已开启流 02h Directive Receive 可见性依据 NSSC.bit0
申请 namespace 专属流资源 03h Directive Receive 不支持增量分配
释放已申请的流资源 02h Directive Send(详见下节) 全部释放后方可重申请

✅ 下一步建议

我们可以继续分析:

  • 第 365 页的 Release Identifier(释放某个 stream)
  • Release Resources(释放该 namespace 的所有 stream 资源)
  • 完整掌握 Streams Directive 的生命周期管理机制

需要我现在继续帮你解析这些内容吗?