管理命令集 - 我们现在进入 第 173 页 内容的深入分析,涵盖两大部分: (第184页)
NVME2.0协议解读 1 min read

管理命令集 - 我们现在进入 第 173 页 内容的深入分析,涵盖两大部分: (第184页)

Blog Author

我们现在进入 第 173 页 内容的深入分析,涵盖两大部分:


✅ 一、【Get Features 命令 – Select = 11b 时的 Completion Queue 返回格式】

图 195:当 SEL=011b(Supported Capabilities)时,Dword 0 的返回字段


📌 Figure 195:Completion Queue Entry Dword 0(SEL=11b)

当你使用 Get Features 命令,并将 Select 字段设置为 011b(即请求该 Feature 的“支持能力”),控制器不会返回 Feature 的实际值,而是在 Completion Queue 的 Dword 0 中返回该 Feature 的支持特性属性,如下:

Bits 字段名 含义
31:3 Reserved 保留位
Bit 2 Changeable 若为 1,表示该 Feature 可被主机修改(即可通过 Set Features 改变)
若为 0,表示此值为只读
Bit 1 NS Specific 若为 1,该 Feature 是 Namespace Specific,设置作用于单一命名空间(NS)
若为 0,设置作用于整个控制器(Controller-wide)
Bit 0 Saveable 若为 1,则该 Feature 支持保存(即通过 Set Features + Save 位可将值持久化)
若为 0,则只能临时修改,控制器重启或 Reset 后恢复默认值

✅ 小结举例:

  • 例子 1: Get Features 请求 Arbitration,返回 Dword 0 的最低三位为 011b
  • 表示该 Arbitration 特性:

    • ✅ 可被保存(Saveable)
    • ✅ 控制器范围有效(不是 namespace specific)
    • ❌ 不可动态修改(不可 Changeable)
  • 例子 2: 如果最低三位为 101b

  • ✅ Saveable
  • ❌ 非 NS Specific
  • ✅ Changeable(支持动态修改)

✅ 二、【Get Log Page 命令字段结构 & 行为详解】

下一部分进入 Get Log Page 命令,及其字段和控制行为解释


📌 命令目的:

通过 Get Log Page 命令,主机可以从控制器读取标准或厂商定义的日志页数据,例如:

  • SMART / Health 信息
  • 错误日志
  • Asynchronous Event Records(AER)
  • Command Effects 日志等

✅ 命令涉及字段:

  • Data Pointer(图 196):数据缓冲区指针
  • Dword 10 – NUMDL + RAE(图 197)
  • 以及 Command Dword 11~14(定义略后)

📌 图 196:Data Pointer

Bits 字段 描述
127:00 Data Pointer (DPTR) 指向主机内存中的数据接收缓冲区,定义见图 87

📌 图 197:Command Dword 10 字段详解

Bits 字段 描述
31:16 NUMDL(Number of Dwords Lower) 返回日志页数据的 Dword 数量的低 16 位(0-based)
15 RAE(Retain Asynchronous Event) 控制是否保留 AER(异步事件记录)

🔹 RAE(Bit 15)解释:

含义
0 读取后清除事件:相关的 AER 被清除(默认行为),下一次同样的事件会再次触发 AER
1 保留事件状态:控制器保留 AER 事件,不会清除,可用于轮询式日志采集而不丢失信息

建议:对于非异步日志页(如错误日志),应将 RAE 设为 0
对于异步日志(如 AER 日志页),可根据策略设为 1 保留或 0 清除


✅ 三、额外协议细节说明

🔸 支持 Offset 类型:

若控制器支持 Log Page Offset 功能(通过 Identify Controller 的 Log Page Attributes 字段表示),则可支持以下两种 Offset 模式:

Offset Type 值 含义 适用条件
0 Byte Offset 所有日志页均需支持
1 Index Offset 仅当该日志页在 LID Supported 表中标记 IOS=1 才允许

⚠️ 若你对某日志页设置 Offset Type = 1(Index 模式),但该日志页不支持 IOS,则命令将失败,状态码为:
Invalid Field in Command


✅ 学习与使用建议总结:

模块 建议
Get Features SEL=11b 学会通过 Dword 0 分析某个 Feature 是否支持“保存/修改/命名空间特定设置”
Get Log Page 掌握日志页访问时 RAE 使用场景、NUMDL 含义、Offset 使用限制
错误处理 注意 Offset Type 使用前需先查询日志页支持性(Figure 204:LID Supported and Effects)
配套学习 交叉参考 Identify Controller 中的 Log Page Attributes 字段,判断是否支持扩展数据访问模式

如果你需要我帮你画一个:

  • Get Features 命令支持属性返回位(Saveable / Changeable / NS Specific)示意图
  • 或者 Get Log Page 的完整字段结构图 + Offset 支持逻辑图

我可以立刻整理为图文帮助你一目了然。要不要来一张?