高级特性与优化 - 第324页
好的,我们继续深入解析 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 编码)
操作步骤:
- 构造 Set Features 命令,FID = 7Dh
- Command Dword 11 设置 EA=10b(Add Entry Multiple)
- 将上述描述符填入 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?