管理命令集 - 📌 为旧版 NVM 子系统构建 NQN (第154页)
NVME2.0协议解读 1 min read

管理命令集 - 📌 为旧版 NVM 子系统构建 NQN (第154页)

Blog Author

我们继续深入分析 《NVM Express® Base Specification, revision 2.0b》第143页,这一部分讨论了如何为旧版的 NVM 子系统 构建 NQN,以及如何使用 Controller ID、EUI64、NGUID 和 Namespace UUID 来唯一标识 NVM 子系统、控制器和命名空间


📌 为旧版 NVM 子系统构建 NQN

NQN 构建方法

对于不提供 NQN 的旧版 NVM 子系统,主机可以通过以下方法构建一个唯一的 NVM 子系统 NQN。这种方法基于 PCI Vendor ID、PCI Subsystem Vendor ID、Serial Number 和 Model Number

字段结构

字节范围 字段名 说明
26:00 NQN Starting String (NSS) 包含 ASCII 字符串 "nqn.2014-08.org.nvmexpress:"(27 个字符)。
30:27 PCI Vendor ID (VID) 包含由 PCI SIG 分配的公司供应商标识符(16 进制 ASCII 字符串)。
34:31 PCI Subsystem Vendor ID (SSVID) 包含由 PCI SIG 为子系统分配的公司供应商标识符(16 进制 ASCII 字符串)。
54:35 Serial Number (SN) 包含由供应商分配的 NVM 子系统序列号(ASCII 字符串)。
94:55 Model Number (MN) 包含由供应商分配的 NVM 子系统型号(ASCII 字符串)。
222:95 Padding (PAD) 填充部分,包含空格(ASCII 字符 20h)。

示例

  • NQN Starting String: "nqn.2014-08.org.nvmexpress:"
  • PCI Vendor ID: abcd
  • PCI Subsystem Vendor ID: 1234
  • Serial Number: SN12345
  • Model Number: ModelXYZ

通过这种构建方法,主机能够为没有提供 NQN 的旧版子系统生成唯一标识符。


📌 控制器唯一标识符(Controller ID)

每个 NVM 子系统 可以包含多个控制器,这些控制器共享同一个 NVM 子系统唯一标识符。每个控制器可以通过 Controller ID 来唯一标识。Controller IDIdentify Controller 数据结构 中定义,并与 NVM 子系统标识符 结合使用,形成一个全球唯一的控制器标识符。

Controller ID 的生成

Controller ID 的生成由厂商定义,具体机制超出了此规范的范围,但它通常基于硬件或软件标识符来确保控制器的唯一性。


📌 命名空间唯一标识符

命名空间标识符(EUI64、NGUID 和 Namespace UUID)

每个 命名空间 都有一个唯一的标识符,可以通过以下方式来确保全球唯一性:

  • EUI64:一个 8 字节的标识符(遵循 EUI-64 标准)。
  • NGUID:一个 16 字节的标识符,基于 EUI64
  • Namespace UUID:一个 16 字节的标识符,遵循 RFC 4122 标准。

在创建命名空间时,控制器应确保至少在以下之一中提供全球唯一的值:

  1. EUI64 字段;
  2. NGUID 字段;
  3. Namespace Identification Descriptor 中设置 Namespace Identifier Type 字段为 3h

EUI64 和 NGUID 的使用规则

  • 如果 EUI64 字段和 NGUID 字段都被清除为 0h,则命名空间应支持在 Namespace Identification Descriptor 数据结构 中包含有效的 Namespace UUID
  • 如果 NSFEAT 字段中的 UIDREUSE 位清除为 ‘0’,则控制器可以在删除原有命名空间后,重用 NGUID/EUI64 值创建新的命名空间。
  • 如果 UIDREUSE 位设置为 ‘1’,则控制器不允许在删除原有命名空间后重用 NGUID/EUI64 值。

🧠 教学总结

项目 说明
NQN 构建方法 对于不提供 NQN 的旧版 NVM 子系统,主机可以使用 PCI Vendor IDPCI Subsystem Vendor IDSerial NumberModel Number 构建一个唯一的 NQN。
Controller ID 每个控制器通过 Controller ID 唯一标识,结合 NVM 子系统标识符,确保控制器的唯一性。
命名空间唯一标识符 每个命名空间有 EUI64NGUIDNamespace UUID 来确保其全球唯一性,具体由控制器管理。
UIDREUSE 控制器是否可以重用已删除命名空间的 NGUID/EUI64 值由 UIDREUSE 位 控制。

🎯 继续学习与实践建议

  1. 了解 EUI64 和 NGUID 的使用:深入理解 EUI64NGUID 的结构以及它们在命名空间管理中的作用,帮助你设计具有全球唯一标识的存储系统。
  2. 控制器唯一性管理:学习如何通过 Controller ID 确保控制器的唯一性,特别是在多控制器系统中的应用。
  3. NQN 构建与兼容性:理解如何为旧版 NVM 子系统构建兼容的 NQN,确保不同版本的硬件与软件之间的兼容性。

如果你有更具体的实施问题或希望进一步了解如何实现这些唯一标识符,随时与我讨论!