文章目录
关键词
Reservation: Reservation
Host:主机
Namespace:命名空间
NVM Subsystem: NVM子系统
Mask: 屏蔽
概述
NVM Express reservations提供的capabilities可由两个或更多的主机利用,以协调对共享命名空间的访问。对这些功能的不正确应用可能会破坏数据和/或损害系统的运行
对一个命名空间的 reservations限制了主机对该命名空间的访问。如果主机在有 reservations 的情况下向命名空间提交命令,并且缺乏足够的权限,那么该命令会被控制器中止,状态码为 Reservation Conflict。如果主机在存在对受该命令影响的任何命名空间的 reservations 的情况下提交NSID设置为FFFFFFFh的命令,并且该主机在所有受影响的命名空间上缺乏足够的权限,那么该命令会被控制器中止,状态码为 Reservation Conflict。提供的capabilities允许从失败或不合作的主机持有的命名空间上的 reservations中恢复。
reservation需要在主机和命名空间之间建立关联。如Figure 471所示,多路径I/O和命名空间共享环境中的每个控制器正好与一个主机相关联,有可能构建两个或更多的主机共享一个控制器的系统
一个主机可以与多个控制器相关联。在Figure 471中,主机A与两个控制器相关,而主机B和C分别与一个控制器相关。在执行任何与reservation有关的操作之前,主机使用Set Features命令与该主机所关联的每个控制器注册一个Host Identifier。Host Identifier允许NVM子系统识别与同一主机相关联的控制器,并在这些控制器之间保留reservation属性(即,无论与该主机相关的哪个控制器处理该命令,主机发出的命令都具有相同的reservation 权限)。
组成一个NVM子系统的控制器应该对reservation有同样的支持。尽管强烈鼓励,但组成NVM子系统的命名空间并不要求对reservation有同样的支持。例如,单个控制器中的一些命名空间可能支持reservation,而其他命名空间不支持,或者支持的reservation类型在命名空间中可能不同。如果一个控制器支持reservation,那么该控制器应:
- 在 Identify Controller data structure中的Optional NVM Command Support (ONCS)字段的bit 5返回 "1 "来表明对reservations的支持。
- 支持Reservation Report命令、Reservation Register命令、Reservation Acquire命令和 Reservation Release命令。
- 支持 Reservation Notification log page。
- 支持 Reservation Log Page Available asynchronous events。
- 支持 Reservation Notification Mask Feature。
- 支持 Host Identifier Feature;以及
- 支持 Reservation Persistence Feature
如果一个命名空间支持reservations,那么该命名空间应:
- 在Identify Namespace data structure中的Reservation Capabilities(RESCAP)字段中报告一个非零值。
- 支持 Persist Through Power Loss(PTPL)状态;以及
- 支持足够的资源,允许主机在NVM子系统的每个控制器上成功注册一个reservation key,并能访问共享命名空间(即,Reservation Register命令不得因缺乏资源而失败)
注意:忽略Existing Key的行为已经改变,以提高与基于SCSI实现的兼容性。对修改后的行为的一致性在Identify
Namespace data structure 的Reservation
Capabilities(RESCAP)字段中显示。关于忽略Existing Key行为的先前定义,请参考NVM Express Base Specification revision 1.2.1。
Reservation 类型
NVMe接口支持6种reservations:
- Write Exclusive;
- Exclusive Access;
- Write Exclusive - Registrants Only;
- Exclusive Access - Registrants Only;
- Write Exclusive - All Registrants; and
- Exclusive Access - All Registrants.
这些 reservation 类型之间的区别是:被排除的访问类型(即写或所有访问),registrants是否拥有与 reservation holder相同的访问权,以及registrants是否也被视为 reservation holder。Figure 472中总结了这些差异,Figure 473.中显示了每个NVM Express命令的具体行为。
Reservations和registrations在所有Controller Level Resets和所有NVM Subsystem Resets中都会持续存在,除了由于断电的reset。 reservation 可以被选择性地配置为使用 Persist Through Power Loss State(PTPLS)在掉电复位时 reservation 。一个Persist Through Power Loss State(PTPLS)与每个支持reservations的命名空间相关联,可以作为Reservation Register命令或Set Features命令的副作用来修改。
A=Allowed, 控制器正常处理的命令
C=Conflict, 命令被控制器中止,状态码为Reservation Conflict
All other command 是指 Vendor specific 的命令
Reservation Notifications
有三种类型的reservation notifications:注册抢占(registration preempted)、reservation 释放(reservation released)和 reservation 抢占(reservation preempted)。导致reservation notifications发生的条件将在以下章节中描述。每当与控制器相关的命名空间上发生 unmasked reservation notifications时,就会创建一个Reservation Notification log page。reservation notifications可以通过 Reservation Notification Mask feature,在每个reservation notifications类型和每个NSID的基础上屏蔽reservation notifications的生成。主机可以使用Asynchronous Event Request命令来通知一个或多个可用的Reservation Notification log pages的存在。
Set Features Reservation Notification Mask (Feature Identifier 82h)
如果命名空间支持 reservations,即 Identify Namespace data structure 中的 Reservation Capabilities(RESCAP)字段非零,则必须支持这个 Feature。
此 Feature 在每个命名空间的基础上控制对 reservation notifications 的屏蔽。只要在命名空间上发生 reservation notifications,并且相应的 reservation notifications 类型没有被此 Feature 在该命名空间上屏蔽,就会创建一个 Reservation Notification log page。如果控制器支持reservations,则应支持此Feature。这些属性在 Command Dword 11 中指定。
使用 FFFFFFFFh 以外的 namespace ID 的 Set Features 命令只修改相应命名空间的 reservation notification mask。使用 namespace ID 为 FFFFFFFFh 的 Set Features 命令会修改athach到控制器并支持reservations的所有命名空间的 reservation notification mask。使用 FFFFFFFFh 以外的 namespace ID 的 Get Features 命令将返回相应命名空间的 reservation notification mask。使用 namespace ID 为 FFFFFFFFh 的 Get Features 命令应被中止,状态码为 Invalid Field in Command。如果Set Features命令或Get Features命令试图访问不支持reservations或无效的命名空间上的 reservation notification mask,那么该命令将被中止,状态码为Invalid Field in Command。
如果Get Features命令成功地完成了这个Feature,Figure 367中指定的属性将在该命令的 completion queue entry 的 Dword 0 中返回。
Bits | Description |
---|---|
31:04 | Reserved |
03 | Mask Reservation Preempted Notification (RESPRE): 如果为’1’,则屏蔽控制器的reservation preempted通知 的报告。如果为’0’,那么通知就不会被屏蔽,只要发生通知,就会创建一个 Reservation Notification log page。 |
02 | Mask Reservation Released Notification (RESREL): 如果为’1’,则屏蔽控制器 Reservation Released 通知的报告。如果为’0’,那么通知就不会被屏蔽,只要发生通知,就会创建一个 Reservation Notification log page |
01 | Mask Registration Preempted Notification (REGPRE): 如果为’1’,则屏蔽控制器的 registration preempted 通知的报告。如果为’0’,那么通知不被屏蔽,只要通知发生,就会创建一个 Reservation Notification log page |
0 | Reserved |
Set Features Reservation Persistence (Feature Identifier 83h)
每个支持 reservations 的命名空间都有一个Persist Through Power Loss(PTPL)的状态,可以使用Set Features命令或Reservation Register命令进行修改 Reservation Persistence feature属性在 Command Dword 11 中指定。
PTPL state包含在特定命名空间的Reservation Persistence Feature中。使用namespace ID FFFFFFFFh的Set Features命令会修改与attach到控制器并支持PTPL(即支持reservations)的所有命名空间相关的PTPL state。使用 FFFFFFFFh 以外的valid namespace ID 且其对应一个支持reservations的命名空间的 Set Features 命令,会修改该命名空间的 PTPL state。***使用namespace ID为FFFFFFFh的Get Features命令应被中止,状态码为Invalid Field in Command。***使用 FFFFFFFFh 以外的valid namespace ID 并对应于支持 PTPL 的命名空间的 Get Features 命令,会返回该命名空间的 PTPL state。如果Set Features命令或Get Features命令使用FFFFFFFFh以外的namespace ID,试图访问不支持该 Feature Identifier 的命名空间的PTPL state,那么该命令将被中止,状态码为Invalid Field in Command。
这个Feature不应是 saveble。如果这个Feature 是 saveable,那么主机应该把当前值和保存的值设置为相同的值。
如果 Get Features 命令成功地完成了这个 Feature Identifier,Figure 368中指定的属性将在该命令的 completion queue entry 的Dword 0中返回。
Bits | Description |
---|---|
31:01 | Reserved |
00 | Persist Through Power Loss (PTPL): 如果为’1’,那么reservations和registrants在断电时持续存在。如果为’0’,那么reservations会被release,registrants将在断电时被清除。 |