NVMe Namespace

目录

简介

详细描述

NSID

唯一性

有效性

allocated 与 active

确定 allocated 与 active 的方法

Active Namespace ID list (CNS 02h)

断电变化

NSID 与 Namespace 关系

Namespace Management

对 controller 的要求

操作与状态

容量

容量确定

容量信息报告

命名空间的操作流程

相关配置

Namespace Identifier (NSID)

Number of Namespaces (NN)

Maximum Number of Allowed Namespaces (MNAN)

OACS bit 3

CNS

结语


简介

Namespace,命名空间,格式化后的非易失性内存空间,可由 host 直接访问。

NSID,namesspace ID,是 controller 提供的标识符,用于对命名空间的访问,在一般命令中都需要填入该字段。

详细描述

NSID

唯一性

  • 若 NVM 子系统支持命名空间管理(Namespace Management)、非对称命名空间访问报告(ANA Reporting)、NVM 集(NVM Set),则 NSID 在 NVM 子系统中必须唯一。
  • 若不支持如上功能,则共享命名空间(shared namespaces)必须唯一,私有命名空间的 NSID 则不要求唯一。

有效性

有效 ID :

  1. FFFFFFFFh,用于指定所有 namespace。也称作 Broadcast Value。
  2. 不等于 0h,且小于 Number of Namespaces (NN) 的设定。

无效 ID:

  1. 即不是 FFFFFFFFh,且不是有效 ID 范围内。

allocated 与 active

有效 NSID,既可以是已分配状态,也可以是未分配状态。所谓分配,即 allocated,allocated NSID 表示已对应上 NVM subsytem 中存在的命名空间。

allocated NSID,又可以分为 active 和 inactive。active 状态表示 NSID 已经 attached 到该 controller 的命名空间。

确定 allocated 与 active 的方法
  • 可以通过 Identify 命令来确定控制器的活跃 NSID 以及 NVM 子系统中的已分配 NSID 。
  • 确定特定控制器的 active NSID 方法:
    • 对每个有效 NSID,发出 CNS 字段清 0 的 Identify 命令。若返回非 0 的数据结构,则为 active NSID
    • 发出 CNS 字段为 2h 的 Identify 命令,可检索最多 1024 个 active NSID,若 active NSID 超过 1024 个,则继续发出该命令,直到获取所有。
    • 确定已分配的 NSID,可发出 CNS 字段为 10h 的 Identify 命令。若 allocated NSID 超过 1024 个,则继续发出该命令,直到获取所有。
Active Namespace ID list (CNS 02h)
  1. 获取活跃 NSID 列表:主机在获取活跃 NSID 列表时,会收到一个包含 1024 个命名空间 ID 的列表。这些 ID 代表活跃的 NSID,并且是按照从小到大的顺序排列,且都大于命令中命名空间标识符(NSID)字段所指定的值。这意味着主机可以通过设置该字段的值,来获取特定范围内的活跃 NSID 列表。例如,如果主机希望获取从某个特定 NSID 值之后的活跃 NSID,就可以在命令中相应设置 NSID 字段。
  2. 对特定 NSID 值的处理:如果 NSID 字段被设置为 FFFFFFEh 或 FFFFFFFFh,控制器会以 “Invalid Namespace or Format(无效命名空间或格式)” 的状态码中止命令。这是因为这两个值在这种情况下是不被允许的特殊值,可能会导致系统无法正确识别或处理命名空间相关操作。
  3. 获取完整命名空间列表:当 NSID 字段被清零为 0h 时,主机可以获取一个命名空间列表(Namespace List)。这个列表从 NSID 为 1h 的命名空间开始包含相关信息,返回的数据结构是 “Namespace List”。这种设置为获取 NVM 子系统中的所有或部分命名空间信息提供了一种方式,方便主机对命名空间进行统一管理和操作。

断电变化

NSID 在断电前后可能发生变化。host 可通过一下字段确定是否遇到相同 namespace 的问题:

  1. UUID 字段
  2. NGUID 字段
  3. EUI64 字段

如上字段,后续如有必要,再做详细补充。

NSID 与 Namespace 关系

  • 未分配(Unallocated):这类 NSID 不指向 NVM 子系统中任何已存在的命名空间。在 NVM 子系统的管理中,未分配的 NSID 代表着尚未被占用的命名空间标识资源,等待后续可能的命名空间创建和分配操作。
  • 已分配(Allocated):已分配的 NSID 对应着 NVM 子系统中实际存在的命名空间。这意味着这些 NSID 已经被用于标识特定的命名空间,在系统中具有明确的指向。
  • 未激活(Inactive):如果是已分配的 NSID 但处于未激活状态,那么它指向的是未连接到当前控制器的命名空间;若是未分配的 NSID ,那它不指向任何命名空间。在多控制器环境下,一个命名空间可能只与部分控制器相连,对于未连接的控制器而言,该命名空间对应的 NSID 就是未激活状态。
  • 激活(Active):激活状态的 NSID 代表其指向的命名空间已连接到当前控制器,可被当前控制器访问和操作。这是 NSID 在控制器与命名空间交互中发挥作用的有效状态。

Namespace Management

命名空间管理功能,包括了 create、delete、attach、detach 等操作。其中 create、delete 由 Namespace Management command 实现,attach、detach 由 Namespace Attach command 实现。这些功能主要在制造过程中被系统管理员使用。

对 controller 的要求

当支持 Namespace Management 时,controller 需满足几点:

  1. 支持 Namespace Management command、Namespace Attach command。
  2. OACS 字段的 bit 3 置 1。
  3. 支持 Namespace Attribute Changed asynchronous event(属性更改异步事件)。
  4. 可能支持 Namespace Granularity(命名空间粒度)。

操作与状态

detach 会使 namespace 对应的 NSID 状态变为 inactive。

delete 会使 namespace 对应的 NSID 状态变为 unallocated。

容量

容量确定

命名空间的大小取决于创建操作时请求的大小、命名空间的格式以及任何特性。

容量单位在 Namespace Granularity List 上报。

另外,NVM 容量可能并不等于 logical block size 乘上 logical block 个数。举例说明,使用 NVM Command Set 时,host 请求一个 32 个 logical block 且 block size 为 4 KiB 的命名空间,即总大小为 128 KiB,而 allocation 的单位实现是 1 MiB,则 NVM 容量可能向上取整 为 1 MiB。

容量信息报告

如下仅根据 spec 整理出来,尚未细究清楚。

NVM set Identifier field

Endurance Group Identifier field

Controller 如何选择分配容量创建命名空间

0

选择 NVM set

0

0

选择两者

0

非 0

选择 NVM set

非 0

0

以“ Invalid Field in Command”的状态码中止命令

非 0

非 0

  • 若 NVM set 存在于 Endurance Group 中,则选择 NVM set
  • 若 NVM set 不存在于 Endurance Group 中,则以“ Invalid Field in Command”的状态码中止命令

命名空间的操作流程

  • 创建命名空间:主机软件需执行一系列操作,包括请求指定通用命名空间功能的 “Identify Namespace” 数据结构、根据控制器支持情况请求特定信息、确定可用容量、创建数据结构、发出命名空间管理命令并在命令成功完成后请求新命名空间的 “Identify Namespace” 数据结构以确定其所有属性23。
  • 附加命名空间:主机软件发出命名空间附加命令指定 “Controller Attach” 操作将命名空间附加到一个或多个控制器;若启用了命名空间属性通知,新附加到命名空间的控制器会向主机报告命名空间属性更改异步事件。
  • 分离命名空间:主机软件发出命名空间附加命令指定 “Controller Detach” 操作将命名空间从一个或多个控制器分离;若启用了命名空间属性通知,被分离的控制器会向主机报告命名空间属性更改异步事件。
  • 删除命名空间:主机软件应先将命名空间从所有控制器分离,然后发出命名空间管理命令指定删除操作;若启用了命名空间属性通知,任何未处理该删除命令且之前连接到该命名空间的控制器会向主机报告命名空间属性更改异步事件。

相关配置

Namespace Identifier (NSID)

Number of Namespaces (NN)

NSID 的最大值。强调一下,这里指的是 ID 的值,不是 namespace 的数量。

Maximum Number of Allowed Namespaces (MNAN)

NVM subsystem 所支持的 namespace 的最大数量。

当该字段清 0 时,已分配 NSID 的最大数量与 NN 字段值相同。(没搞懂,有点 confused)

OACS bit 3

CNS

结语

本文已经讲了不少关于 Namespace 的内容,但还是没讲透彻。不过没关系,关于 Namespace,只要你接触 NVMe,就会频繁地接触,通过不断地了解使用,一定能更好地了解 Namespace。本文也会持续补充完善。

Reference

NVM Express® Base Specification, Revision 2.0e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值