UNH-IOL Reservation 一致性测试用例【1】 - Reservation Report 验证

Reservation 系列导航

Reservation 系列导航

UNH-IOL Reservation 一致性测试用例【1】- Reservation Report 命令验证
UNH-IOL Reservation 一致性测试用例【2】- Reservation注册
UNH-IOL Reservation 一致性测试用例【3】- 取消注册
UNH-IOL Reservation 一致性测试用例【4】- Reservation Acquire 验证
UNH-IOL Reservation 一致性测试用例【5】- Reservation Release
UNH-IOL Reservation 一致性测试用例【6】- 抢占 Reservation
UNH-IOL Reservation 一致性测试用例【7】- 清除Reservation

Reservation 需要用支持多控制器的DUT来测

Group 7: Reservations

Test 7.1 – Reservation Report Command (M, OF-FYI)

Case 1: No Registrants (M, OF-FYI)

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. NVMe Host 向 NVMe Controller 发送 Set Features 命令(FID 81h, Host Identifier),以便为该 Controller 设置其 Host Identifier。
    2. 对于 attach 到 NVMe Controller 的每个 active namespace:
      1. NVMe Host 向 NVMe Controller 发出 Reservation Report 命令
      2. NVMe Host 向 NVMe Controller 发送 Get Features 命令(FID 83h, Reservation Persistence)
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. Reservation Status data structure 的 Reservation Type (RTYPE) 字段被置为0,表示该 namespace 上没有 reservation 被 Hold
  3. Reservation Status data structure 的 Registered Controllers (REGCTL) 字段被置为0,表示没有 host 是该 namespace 上的 Registrant
  4. Reservation Status data structure 的 Persist Through Power Loss State (PTPLS) 字段与 Get Reservation Persistence feature completion queue entry CDW 0 中的 Persist Through Power Loss (PTPL) 字段相同
  5. controller 支持 Host Identifier feature

注意事项

在支持NVMe 2.0 或以上的版本的 driver 中,当要设置 Host Identifier 时,如果它在测试开始时是非零值,set feature 将被 abort,Status Code 为 Command Sequence Error

Case 2: Host is a Registrant (M, OF-FYI)

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. NVMe Host 向NVMe Controller 发出 Set Features 命令(FID 81h, Host Identifier),以便为该 Controller 设置其 Host Identifier。
    2. 对于 attach 到 NVMe Controller 的每个 active namespace:
      1. NVMe Host 发出 Reservation Register 命令,CDW 10 的 Reservation Register Action (RREGA) 字段设置为000b(即 Register Reservation Key),并在 New Reservation Key(NRKEY) 字段中为 namespace 向 NVMe Controller 提供 reservation key,使 Host 成为该 namespace 的 registrant,并对该 namespace 执行 Reservation Acquire。
      2. NVMe Host 向 NVMe Controller 发出 Reservation Report 命令。
      3. NVMe Host 向 NVMe Controller 发出 Identify(CNS 01h) 命令,获取该 Controller 的Identify Controller Data Structure。
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. Host 向 NVMe Controller 发出的每一条 Reservation Register 命令,Reservation Status data structure 的 Generation(GEN) 字段都是递增的。
  3. Reservation Status data structure 的 Reservation Type(RTYPE)字段为 1~6 的值,表明 namespace 上的 reservation 被 hold。
  4. Reservation Status data structure 的 Number of Registered Controllers(REGCTL)字段为 Host 设置了 Host Identifier 的 Controllers 数量,REGCTL 表明与 Host 相关的 Controllers 数量,并表明 Host 是 namespace 的 registrant。
  5. 作为 Reservation Status data structure 的一部分返回的 Registered Controller data structures 的数量与存储在 REGCT L字段中的值完全相等。
  6. Registered Controller data structures 的 Controller ID(CNTLID)字段与该 Controller 的 Identify Controller data structure 中的 CNTLID字段相匹配。
  7. Registered Controller data structures 的 Reservation Status(RCSTS) 字段的 bit 0 被清为非’0’值,以表明与 controller 相关的 Host 对该 namespace 持有 reservation。
  8. Registered Controller data structures 的 Host Identifier(HOSTID) 字段被设置为与 Host 在 Set Features 命令中为 Host Identifier 设置的值相同。
  9. Registered Controller data structures 的 Reservation Key(RKEY) 字段被设置为 Host 在 Reservation Register 命令中为其 reservation key 设置的相同值。
  10. controller 支持 Host Identifier feature

注意事项

在支持NVMe 2.0 或以上的版本的 driver 中,当要设置 Host Identifier 时,如果它在测试开始时是非零值,set feature 将被 abort,Status Code 为 Command Sequence Error

Case 3: 64 Bit Host Identifier (FYI, OF-FYI)

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 通过 Feature Identifiers Supported and Effects (Log Identifier 12h) 检查是否支持 Set/Get Features Host Identifier feature identifier (81h)
  3. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. NVMe Host 向 Controller 发出 Set Features Host Identifier, 以便为该 Controller 注册一个 64位 Host Identifier
    2. 对于 atttach 到该 Controller 的每个 active namespace:
      1. NVMe Host 发出 Reservation Register 命令,Reservation Register Action (RREGA) 字段设置为000b(即 Register Reservation Key),并在 New Reservation Key (NRKEY) 字段中向 NVMe Controller 提供该 namespace 的 reservation key,以便使 Host 成为该 namespace 的 registrant,并对该 namespace 执行 Reservation Acquire
      2. NVMe Host 向 NVMe Controller 发送一个 Reservation Report 命令,CDW 11 字段 Extended Data Structure(EDS) 设为 1
  4. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. Controller 中断 Reservation Report 命令,返回 SCT: Generic Command(0h), SC: Host Identifier Inconsistent Format(18h)
  2. Controller 支持 Host Identifier feature

注意事项

在支持NVMe 2.0 或以上的版本的 driver 中,当要设置 Host Identifier 时,如果它在测试开始时是非零值,set feature 将被 abort,Status Code 为 Command Sequence Error

Case 4: 128 Bit Host Identifier (FYI, OF-FYI)

在一个 namespace 建立 reservation 之前, Host 应通过注册 reservation key 成为该 namespace 的 registrant。向 namespace 注册 reservation key,可在 Host 和 namespace 之间建立关联。 Host 只需要在一个 Controller 上注册,就可以成为 NVM Subsystem 中所有可以访问该 namespace 并与 Host 相关联的 Controller 上的 namespace 的 registrant。

Host 通过在 namespace 上执行 Reservation Register 命令,Reservation Register Action (RREGA) 字段设置为000b(即 Register Reservation Key),并在 New Reservation Key (NRKEY) 字段中提供一个 reservation key 来注册 reservation key。

Reservation Register 命令使用 CDW 10 和内存中的 Reservation Register data structure。如果该命令使用 PRP 进行数据传输,则使用 PRP Entry 1 和 PRP Entry 2 字段。如果命令使用 SGL 进行数据传输,则使用 SGL 输入 1 字段。所有其他命令的特定字段都被保留。

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 检查 Identify controller data structure(CNS 01) CTRATT bit 0 以确定 controller 是否支持 128 bit Host identifiers,如果为0,跳过本测试
  3. 通过 Feature Identifiers Supported and Effects (Log Identifier 12h) 检查是否支持 Set/Get Features Host Identifier feature identifier (81h)
  4. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. NVMe Host 向 Controller 发出 Set Features Host Identifier, 以便为该 Controller 注册一个128位 Host Identifier
    2. 对于 atttach 到该 Controller 的每个 active namespace:
      1. NVMe Host 发出 Reservation Register 命令,Reservation Register Action (RREGA) 字段设置为000b(即 Register Reservation Key),并在 New Reservation Key (NRKEY) 字段中向 NVMe Controller 提供该 namespace 的 reservation key,以便使 Host 成为该 namespace 的 registrant,并对该 namespace 执行 Reservation Acquire
      2. NVMe Host 向 NVMe Controller 发送一个 Reservation Report 命令,CDW 11 字段 Extended Data Structure(EDS) 设为 0
  5. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. Controller 中断 Reservation Report 命令,返回 SCT: Generic Command(0h), SC: Host Identifier Inconsistent Format(18h)
  2. Controller 支持 Host Identifier feature

注意事项

在支持NVMe 2.0 或以上的版本的 driver 中,当要设置 Host Identifier 时,如果它在测试开始时是非零值,set feature 将被 abort,Status Code 为 Command Sequence Error

Case 5: Dynamic Controller Not Associated with Host (FYI, OF-FYI)

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. 检查 controller 是否为一个动态 controller ( 定义见 NVMe-oF specification),如果不是,跳过本测试
    2. NVMe Host 向动态 NVMe Controller 发送一个 Reservation Report 命令
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

controller 将 Controller ID 字段设为 FFFFh.








回到顶部

你可能感兴趣的:(ssd,#,NVMe,NVMe,硬件工程,conformance)