持久内存与安全机制 - 第375页
我们继续深入解析 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 Parameters的NSA字段中。
⚠️ 错误处理与限制:
| 情况 | 行为 |
|---|---|
| 资源不足 | 返回 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 的生命周期管理机制
需要我现在继续帮你解析这些内容吗?