高级特性与优化 - 第324页
NVME2.0协议解读 1 min read

高级特性与优化 - 第324页

Blog Author

好的,我们继续深入解析 NVMe 2.0b 规范中的 Host Metadata 特性:图 362 与 Enhanced/Controller Metadata 的使用规则与应用机制


📘 图 362:Controller Metadata Element Types(控制器元数据元素类型)

这个表定义了所有可被主机写入(或控制器报告)的标准化元数据类型,对应字段 Element Type (ET),这些字段都用于增强型控制器元数据(FID=7Dh)和传统控制器元数据(FID=7Eh)特性。

🔠 类型与含义总览:

Element Type (ET) 定义 数据类型
01h 操作系统中控制器名称(OS Controller Name) UTF-8 字符串
02h 操作系统驱动名称(OS Driver Name) UTF-8 字符串
03h 操作系统驱动版本(OS Driver Version) UTF-8 字符串
04h 预启动环境控制器名称(Pre-boot Controller Name) UTF-8 字符串
05h 预启动驱动名称(Pre-boot Driver Name) UTF-8 字符串
06h 预启动驱动版本(Pre-boot Driver Version) UTF-8 字符串
07h 系统处理器型号(System Processor Model) UTF-8 字符串
08h 芯片组驱动名称(Chipset Driver Name) UTF-8 字符串
09h 芯片组驱动版本(Chipset Driver Version) UTF-8 字符串
0Ah 操作系统名称与版本号(OS Name and Build) UTF-8 字符串
0Bh 系统产品名称(System Product Name) UTF-8 字符串
0Ch 固件版本(Firmware Version,通常是UEFI版本) UTF-8 字符串
0Dh 操作系统驱动文件名(Driver Filename) UTF-8 字符串
0Eh 显卡驱动名称(Display Driver Name) UTF-8 字符串
0Fh 显卡驱动版本(Display Driver Version) UTF-8 字符串
10h 主机定义的故障记录(Host-Determined Failure Record) UTF-8 字符串
11h~17h 保留
18h~1Fh 厂商自定义字段(Vendor Specific) 自定义格式

🧭 使用场景对比:FID=7Dh 与 7Eh 的不同

特性名 FID 支持多个同类 Element? 是否支持批量添加(EA=10b)? 主要用途
Enhanced Controller Metadata 7Dh ✅ 是,支持同类元素多条 ✅ 支持 EA=10b 添加多条 现代系统优先使用
Controller Metadata(Legacy) 7Eh ❌ 否,每类仅限 1 条 ❌ 不支持 EA=10b,设置会报错 兼容 NVMe-MI 1.1 及更早规范

🎯 重点提示(标准中明确规定):

  • 如果控制器同时支持 FID 7Dh 和 7Eh,那么主机应优先使用 7Dh(增强型),不要使用传统的 7Eh。
  • 控制器在 Controller Level Reset 后,两个特性的元数据条目数都应被清零。
  • 当主机执行 Get Features (SEL = 011b) 来查询功能能力时,控制器返回值的 NS Specific 位应为 0(即非命名空间相关功能)。

✍ 实战举例:

示例:主机将“ThinkStation-P620”作为系统产品名称(ET=0Bh)写入控制器的增强型元数据中:

构造 Host Metadata Descriptor:

ET   = 0Bh            → 系统产品名
ER   = 00h            → 版本号
ELEN = 0Fh (15 bytes) → 元数据长度
EVAL = "ThinkStation-P620"(UTF-8 编码)

操作步骤:

  1. 构造 Set Features 命令,FID = 7Dh
  2. Command Dword 11 设置 EA=10b(Add Entry Multiple)
  3. 将上述描述符填入 Host Metadata Data Structure(最大 4KiB)

🚦 总结核心知识点:

项目 说明
元数据内容 全部为 UTF-8 字符串,包含操作系统、驱动、芯片、平台等
Enhanced Controller Metadata 支持多条同类元素(ET 可重复)
Controller Metadata 每种 ET 只支持一条记录,行为较保守
用于平台调试、管理、分析 如平台名称、驱动版本、BIOS、主机故障记录等
最大总大小 固定 4096 字节(4KiB),不可超出
与 NVMe-MI 搭配使用 特别适用于 out-of-band 管理(远程平台管理)场景

如果你希望我:

  • 用代码展示构造 4KiB 的 Host Metadata
  • 用图解展示整个结构
  • 展开讲解 FID=7Fh Namespace Metadata 的用法

可以继续告诉我,我们可以一层层拆开讲清。要不要我们现在一起进入 Namespace Metadata?