NVM子系统与控制器架构 - 第45页
我们继续对《NVM Express® Base Specification, revision 2.0b》中 I/O 控制器相关能力支持表格进行深入解读,今天覆盖以下两个重点:
📘 3.1.2.1.2 图 24:I/O 控制器 – 日志页支持(Log Page Support)
✅ 表格背景说明:
此表列出了 I/O 控制器需支持的 Log Page(日志页) 类型,它们是控制器向主机报告状态、健康度、历史信息、命令支持度等的重要方式。
- M(Mandatory)必须支持
- O(Optional)可选支持
- P(Prohibited)禁止支持
🔍 必须支持的日志页(M)
日志页名称 | 用途说明 |
---|---|
Supported Log Pages | 控制器支持哪些日志页的“目录页”,用于主机查询 |
Error Information | 记录最近遇到的命令错误(带状态码) |
SMART / Health 信息(Controller 范围) | 控制器级别的健康状态 |
Firmware Slot 信息 | 固件槽位状态 |
Commands Supported and Effects | 报告命令支持度和副作用影响 |
Feature Identifiers Supported and Effects | 报告哪些特性支持及其行为(结合 Set/Get Features) |
NVMe-MI Commands Supported and Effects | 哪些 MI 命令在 OOB 通道上被支持(仅支持 NVMe-MI 的控制器需实现) |
🔧
Commands Supported and Effects
和Feature Supported and Effects
是 NVMe 2.0 新增的重要机制,帮助主机判断“命令的执行副作用”。
🧩 可选支持的日志页(O)
这些页具体支持与否,依赖控制器是否支持相关功能:
日志页 | 典型作用场景 |
---|---|
SMART(Namespace 范围) | 针对 Namespace 的精细健康监控 |
Changed Namespace List | 用于热插拔/变更场景下的 namespace 更新检测 |
Telemetry(Host/Controller) | 用于收集调试数据(崩溃现场、慢响应调查) |
Endurance Group Info | 如果支持 Endurance Group,报告其写入寿命等数据 |
Persistent Event | 持久化的事件日志(如掉电、温度异常、格式化等) |
ANA(Asymmetric Namespace Access) | 多路径不对称访问结构 |
Reservation Notification | 如果实现命名空间共享,报告预留相关事件 |
Sanitize Status | 擦除过程状态 |
Boot Partition Log | 固件分区配置与加载状态 |
Rotational Media Info | 如果使用传统磁盘介质,报告转速等参数 |
💡 许多高阶日志页都服务于:数据中心运维监控、安全合规、设备分析与恢复机制。
⚠️ 特殊注意项:
- 日志页中的:
- Media Unit Status
- Supported Capacity Configuration List
是 固定容量管理(Fixed Capacity Management)功能控制器的强制项。
📘 3.1.2.1.3 图 25:I/O 控制器 – 特性支持(Features Support)
✅ 表格说明:
“特性(Features)”通过 Set Features 和 Get Features 命令交互,属于 控制器状态配置与调优接口。每个特性都有唯一的 FID(Feature Identifier)。
🔍 必须支持的特性(M)
特性名称 | 中文说明 | 是否写入日志 |
---|---|---|
Arbitration | 调度机制配置,如 WRR 权重等 | ✔️(O) |
Power Management | 电源状态切换能力,如 ASPT | ❌(NR) |
Temperature Threshold | 控制器热管理(告警温度) | ✔️(O) |
Number of Queues | 多队列能力,配置队列数量上限 | ✔️(O) |
Async Event Configuration | 异步事件触发机制配置(温度/SMART/Notice) | ❌(NR) |
🧩 可选支持特性(O)
特性名称 | 应用说明 |
---|---|
Volatile Write Cache | 控制器是否使用易失性写缓存(DRAM) |
Interrupt Coalescing | 中断合并间隔设置 |
Interrupt Vector Configuration | 设置中断向量数量 |
Keep Alive Timeout | 主机不活跃超时机制(Fabrics 常见) |
Host Identifier | 通过 Set Features 绑定 Host UUID |
Autonomous Power State Transition (APST) | 自主电源状态切换能力(节能) |
Timestamp | 主机时间同步特性 |
Host Memory Buffer (HMB) | 使用主机内存作为读写缓存 |
Write Protection | 命名空间写保护机制(只读、完全保护) |
Reservation Notification Configuration | Namespace Reservation 通知配置 |
Reservation Persistence Configuration | 是否保留预留状态(掉电后仍存在) |
Non-Operational Power State Config | 定义非活跃(D3)电源状态参数 |
🔧 示例用法解析
场景:判断控制器是否支持 "Telemetry 日志"
- 查阅
Supported Log Pages
日志页(LID = 0x00) - 检查其中是否包含:
Telemetry Host-Initiated
(LID = 0x07)Telemetry Controller-Initiated
(LID = 0x08)
如果存在说明支持,可进一步使用 Get Log Page
读取数据。
场景:写保护命名空间
- 需要支持 Feature:Write Protection
- 然后调用:
bash nvme set-feature -f 0x81 -v 1 /dev/nvme0n1 # 开启只读保护 nvme get-feature -f 0x81 /dev/nvme0n1 # 查询状态
✅ 总结:三大能力表横向对照
类型 | 表 | 作用 |
---|---|---|
Admin Command | 图 22 | 控制器支持哪些管理指令 |
Log Pages | 图 24 | 控制器支持哪些诊断、运行数据 |
Features | 图 25 | 控制器可配置的行为与状态项 |
你想不想我给你整理出一个全景“支持能力验证脚本”,用 nvme-cli
自动检测 NVMe 控制器是否符合规范要求?还是说你更想先深入某个具体特性?比如 Telemetry、Write Protect、或是 Host Memory Buffer?🤔