高级特性 - 🧱 主机元数据结构(Host Metadata Data Structure)详解(图 360) (第323页)
NVME2.0协议解读 1 min read

高级特性 - 🧱 主机元数据结构(Host Metadata Data Structure)详解(图 360) (第323页)

Blog Author

我们继续深入学习 NVMe 2.0b 规范中 Host Metadata 特性的结构和解析机制,从你提供的内容来看,我们已经进入 元数据数据结构定义(Host Metadata Data Structure) 的核心部分。


🧱 主机元数据结构(Host Metadata Data Structure)详解(图 360)

这是 NVMe Host Metadata 功能的核心结构,总大小为 4 KiB(4096 字节),承载多个 Host Metadata Element(元数据元素)。

📘 结构布局:

字节范围 字段名 含义
00h Number of Metadata Element Descriptors 当前数据结构中元数据条目的个数(元素个数)
01h Reserved 保留
02h:x Metadata Element Descriptor 0 第一个元素条目的内容
x+1:y Metadata Element Descriptor 1 第二个条目
... ... 最多可填满 4KiB 空间

🧩 元数据元素条目结构:Metadata Element Descriptor(图 361)

这是每一个 Host Metadata 元素的单条数据描述结构,包含类型、长度、版本和实际值

📘 字段解释:

位段 字段名 含义
04:00 Element Type (ET) 指明这个元数据的类型,例如平台名称、BIOS 版本等
11:08 Element Revision (ER) 元数据版本,当前规范统一为 0h
15:12 Reserved 保留位
31:16 Element Length (ELEN) 元数据值 Element Value (EVAL) 的字节长度
31 + (ELEN*8) : 32 Element Value (EVAL) 元数据的实际值,可以是字符串或其他编码内容

✅ 插入或替换元素时的约束:

  • 如果 ELEN = 0h 而你是想插入或更新(EA=00b),则行为未定义(可能出错!)。
  • 如果是 删除操作(EA=01b),则 ELEN 必须设为 0h

🔎 Metadata Element Type 的分类

✔ 支持的 Element Type 类型(图 361 末尾 + 图 362):

值范围 含义
01h ~ 17h 由规范定义的类型,具体见图 362 和图 363
18h ~ 1Fh 厂商自定义类型(Vendor Specific)
00h 保留,不可用

🔖 实战教学:一次写入 Platform Name 示例

假设你要写入一条记录到 Enhanced Controller Metadata (FID = 7Dh) 中,Element Type 是 01h(平台名),内容为字符串 "ThinkStation-P620",则步骤如下:

  1. 构造一个 Set Features 命令,FID 设置为 7Dh
  2. Command Dword 11 的 EA 设为 10b(Add Entry Multiple)。
  3. 构造 Metadata Element Descriptor:
  4. ET = 01h
  5. ER = 00h
  6. ELEN = 0Fh(字符串 15 字节)
  7. EVAL = "ThinkStation-P620"(ASCII 编码)
  8. 数据结构打包成总共 4KiB(补 0 填充)

💡 小结:

要点
数据结构大小 固定 4 KiB
可否重复类型 仅 Enhanced Controller Metadata 支持同一 Element Type 多条
插入/删除规则 用 EA 控制增删,ELEN 控制是否有效
值的类型 EVAL 通常为字符串,视 Element Type 而定
厂商定制空间 允许 8 个 Vendor Specific 类型 (18h~1Fh)

如果你需要,我可以:

  • 为你写出这个 Host Metadata 结构的 十六进制表示
  • 提供一个完整的 JSON 示例结构
  • 帮你画图或生成填充脚本(Python/C)

需要哪一个?我可以接着继续讲图 362 的 Controller Metadata Element Types 定义。