控制器寄存器与属性配置 - 第82页
NVME2.0协议解读 1 min read

控制器寄存器与属性配置 - 第82页

Blog Author

深入分析 NVM Express® Base Specification, revision 2.0b

3.2.1.6 NSID 和命名空间的使用

NSID(命名空间标识符)是指向 NVM(非易失性内存)子系统中命名空间的唯一标识符。它在不同的 NVM 子系统和控制器中具有重要作用。根据是否支持命名空间管理(Namespace Management)、ANA报告(ANA Reporting)和 NVM 集合(NVM Sets)功能,NSID 的使用和唯一性要求有所不同。

命名空间的管理方式

  • NSID 唯一性
  • 如果支持命名空间管理、ANA报告或 NVM 集合功能,则在 NVM 子系统中,所有 NSID 必须是唯一的。举例来说,NSID 3 对于任何控制器来说,都会指向相同的物理命名空间。
  • 如果这些功能不支持
    • 共享命名空间:NSID 必须唯一。
    • 私有命名空间:NSID 可以不唯一(这意味着不同控制器可能会有不同的 NSID 指向相同的命名空间)。

NSID 获取方式

通过 Identify 命令,可以确定特定控制器的活动 NSID(active NSIDs)和 NVM 子系统中的已分配 NSID(allocated NSIDs)。

1. 获取活动 NSID:

活动 NSID 是指当前控制器上可用的命名空间。获取活动 NSID 的方法有两种: 1. 使用 Identify 命令,并清除 CNS 字段(设置为 0h)。对于每个有效的 NSID,若返回的数据结构非零,则该 NSID 为活动 NSID。 2. 使用 Identify 命令,将 CNS 字段设置为 2h,此时会返回最多 1,024 个活动 NSID。如果活动 NSID 的数量超过 1,024 个,则继续发起 Identify 命令,直到获取所有的活动 NSID。

2. 获取已分配的 NSID:

已分配的 NSID 是指那些已经与命名空间关联的 NSID。获取已分配的 NSID 的方法如下: - 使用 Identify 命令,将 CNS 字段设置为 10h,此时会返回最多 1,024 个已分配的 NSID。如果已分配的 NSID 数量超过 1,024 个,则继续发起 Identify 命令,直到获取所有已分配的 NSID。

3.2.1.7 识别活动和已分配的 NSID

  • CNS 字段:Identify 命令中的 CNS (Controller Namespace Selection) 字段用于确定是获取活动的 NSID 还是已分配的 NSID。该字段的值决定了控制器返回哪些类型的命名空间信息。

3.2.1.8 例子总结

  • 活动 NSID(Active NSID)
  • 关联并绑定到特定控制器的命名空间。
  • 通过执行 Identify 命令来识别,如果 CNS 设置为 0h2h,可以通过返回的数据来判断。

  • 已分配 NSID(Allocated NSID)

  • 存在于 NVM 子系统中的命名空间,无论是否绑定到特定控制器。
  • 通过执行 Identify 命令来识别,CNS 设置为 10h

总结

  • NSID 唯一性要求:在支持命名空间管理、ANA报告或 NVM 集合功能的情况下,NSID 必须在整个子系统中唯一。
  • 获取活动与已分配的 NSID:通过设置 CNS 字段来检索相关的命名空间标识符,支持最多 1,024 个活动或已分配 NSID的获取。