UNH-IOL Reservation 一致性测试用例【5】- Reservation Release

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

Test 7.5 – Releasing a Reservation (M, OF-FYI)

Host 通过 Reservation Release 命令来释放 reservation,将 Reservation Release Action (RRELA) 字段设为 000b (i.e. Release),Reservation Type (RTYPE) 设为要释放的 reservation 类型,Current Reservation Key (CRKEY) 提供 host 当前的 reservation key。

Reservation Release 命令使用 CDW 10 和内存中的 Reservation Release data structure。如果命令使用 PRPs 传输数据,PRP Entry 1 和 PRP Entry 2 字段应被使用。如果命令使用 SGLs 传输数据,那么 SGL Entry 1 字段应被使用。其他特定字段是 reserved。

由于抢占或注册清楚操作导致的 Reservation release 会在后面的测试中讲到。

Case 1: Release with Reservation Release Command (M, OF-FYI)

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. NVMe Host 向 Controller 发出 Set Features Host Identifier, 以便为该 Controller 注册一个 Host Identifier
    2. 对于 atttach 到该 Controller 的每个 active namespace:
      1. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,以使 host 成为该 namespace 的 registrant。
      2. Host 发出 Reservation Acquire 命令,将 Reservation Acquire Action (RACQA) 字段设为 000b (Acquire),向 Current Reservation Key (CRKEY) 字段提供当前的 reservation key,并将 Reservation Type (RTYPE) 字段设为 指定的 reservation type,以便 host 在 namespace 获取该 reservation 类型的 reservation
      3. Host 发出 Reservation Release 命令,Reservation Release Action (RRELA) 设为 000b (i.e. Release),Reservation Type (RTYPE) 设为要释放的 reservation 类型,Current Reservation Key (CRKEY) 设为与 host 相关联的当前的 reservation key,以便于释放 host 持有的 reservation
      4. Host 发一个 Reservation Report 命令
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. 在 Reservation Report 完成后,检查 Reservation Status data structure, host 已经成功释放该 reservation

注意事项

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


Case 2: Reservation Release Command Error Conditions (M, OF-FYI)

如果 CRKEY 值与 registrant 在 namespace 注册时使用的 CRKEY 值不匹配,命令应终止,状态为 Registration Conflict。主机可通过将命令中的 Ignore Existing Key (IEKEY) 位设置为 “1”,在不考虑当前 reservation key 值的情况下释放 reservation。如果 RTYPE 字段与当前 reservation 的类型不匹配,则命令将以状态 Invalid Field in Command 中止。

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation

  2. 针对 NVMe Subsystem 里的每个 NVMe Controller:

    1. NVMe Host 向 Controller 发出 Set Features Host Identifier, 以便为该 Controller 注册一个 Host Identifier
    2. 对于 atttach 到该 Controller 的每个 active namespace:
      1. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,以使 host 成为该 namespace 的 registrant。
      2. Host 发出 Reservation Acquire 命令,将 Reservation Acquire Action (RACQA) 字段设为 000b (Acquire),向 Current Reservation Key (CRKEY) 字段提供当前的 reservation key,并将 Reservation Type (RTYPE) 字段设为 指定的 reservation type,以便 host 在 namespace 获取该 reservation 类型的 reservation
      3. RES_REL1: Host 发送 Reservation Release 命令,Reservation Release Action (RRELA) 字段设为 000b (i.e. Release),Reservation Type (RTYPE) 字段设为要释放的 reservation 类型,Current Reservation Key (CRKEY) 设为不是 host 当前的 reservation key
      4. RES_REP1: Host 发一个 Reservation Report 命令
      5. RES_REL2: Host 发出 Reservation Release 命令,Reservation Release Action (RRELA) 设为 000b (i.e. Release),Reservation Type (RTYPE) 设为不是要释放的 reservation 类型,Current Reservation Key (CRKEY) 设为与 host 相关联的当前的 reservation key,以便于释放 host 持有的 reservation
      6. RES_REP2: Host 发一个 Reservation Report 命令
      7. RES_REL3: Host 发出 Reservation Release 命令,Reservation Release Action (RRELA) 设为 000b (i.e. Release),Reservation Type (RTYPE) 设为要释放的 reservation 类型,Current Reservation Key (CRKEY) 设为与 host 相关联的当前正确的 reservation key,并将 IEKEY 字段设为 1,以便于释放 host 持有的 reservation
      8. RES_REP3: Host 发一个 Reservation Report 命令
      9. RES_REL4: Host 发出 Reservation Release 命令,Reservation Release Action (RRELA) 设为 000b (i.e. Release),Reservation Type (RTYPE) 设为要释放的 reservation 类型,Current Reservation Key (CRKEY) 设为与 host 相关联的当前正确的 reservation key,并将 IEKEY 字段设为 0,以便于释放 host 持有的 reservation
      10. RES_REP4: Host 发一个 Reservation Report 命令
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. RES_REL1 命令返回状态 Reservation Conflict
  3. RES_REP1 返回的 Reservation Status data structure 表明 host 依旧持有 reservation.
  4. RES_REL2 命令返回状态 Invalid Field in Command
  5. RES_REP2 返回的 Reservation Status data structure 表明 host 依旧持有 reservation.
  6. RES_REL3 命令返回状态 Invalid Field in Command
  7. RES_REP3 返回的 Reservation Status data structure 表明 host 依旧持有 reservation.
  8. RES_REP4 返回的 Reservation Status data structure 表明 host 已经释放 reservation.

注意事项

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

Case 3: Multiple Hosts (FYI, OF-FYI) Dual Port Devices Only

在 namespace 上没有 reservation 或 host 不是 reservation holder 的情况下,registrant 使用 Reservation Release 命令释放 reservation 的尝试将导致命令成功完成,但不会对 controller 或 namespace 产生任何影响。

该测试要求 NVM subsystem 中至少有两个具有 shared namespace 的 Controller。

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation;检查DUT当前是否为多个ports
  2. NVMe Host 1 向 Controller 1 发出 Set Features Host Identifier, 以便为该 Controller 注册一个 Host Identifier
  3. NVMe Host 2 向 Controller 2 发出 Set Features Host Identifier, 为该 Controller 注册一个不同于 Host 1 的 Host Identifier
  4. Host 1 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 1 提供 reservation key,以使 host 成为该 shared namespace 的 registrant。
  5. Host 2 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 2 提供 reservation key,以使 host 成为该 shared namespace 的 registrant。
  6. Host 1 发送 Reservation Release 命令,将 Reservation Release Action (RRELA) 字段设为 000b (i.e. Release),Reservation Type (RTYPE) 设为任意的 reservation 类型,向 Current Reservation Key (CRKEY) 字段提供当前 Host 1 的 reservation key
  7. Host 1 发出 Reservation Acquire 命令,将 Reservation Acquire Action (RACQA) 字段设为 000b (Acquire),向 Current Reservation Key (CRKEY) 字段提供当前 Host 1 的 reservation key,并将 Reservation Type (RTYPE) 字段设为 namespace 支持的 reservation type,以便 host 1 在 namespace 获取该 reservation 类型的 reservation
  8. Host 2 发出 Reservation Acquire 命令,将 Reservation Acquire Action (RACQA) 字段设为 000b (Acquire),向 Current Reservation Key (CRKEY) 字段提供当前 Host 1 的 reservation key,并将 Reservation Type (RTYPE) 字段设为 host 1 持有的 reservation type
  9. Host 2 发一个 Reservation Report 命令
  10. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. Host 1 发出的 reservation release 命令成功
  3. Host 2 发出的 reservation release 命令成功
  4. 在 Reservation Report 完成后,检查 Reservation Status data structure, Host 1 持有了该 namespace 的 reservation, Host 2 没有


Case 4: Release Due to Unregister (M, OF-FYI)

如果 Host 是最后剩余的 reservation holder(即 Reservation Type 为 Write Exclusive - All Registrants 或 Exclusive Access - All Registrants),或者是唯一的 reservation holder,那么当 host 取消注册时, reservation 将被释放。

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 针对 NVMe Subsystem 里的每个 NVMe Controller:
    1. NVMe Host 向 Controller 发出 Set Features Host Identifier, 以便为该 Controller 注册一个 Host Identifier
    2. 对于 atttach 到该 Controller 的每个 active namespace:
      1. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,以使 host 成为该 namespace 的 registrant。
      2. Host 发出 Reservation Acquire 命令,将 Reservation Acquire Action (RACQA) 字段设为 000b (Acquire),向 Current Reservation Key (CRKEY) 字段提供当前的 reservation key,并将 Reservation Type (RTYPE) 字段设为 01h (Write Exclusive Access),以便 host 在 namespace 获取该 reservation 类型的 reservation
      3. Host 发出 Reservation Register 命令,指定 Unregister Reservation Key 操作,向 Current Reservation Key (CRKEY) 字段提供当前的 reservation key,以取消 Host 作为该 namespace registrant 的注册。
      4. Host 向 Controller 发送 Reservation Report 命令。
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. 在 Reservation Report 完成后,检查 Reservation Status data structure, host 已成功从 namespace 取消注册,并且 host 已经成功释放该 reservation

注意事项

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



你可能感兴趣的:(ssd,#,NVMe,测试用例,汽车,SSD,NVMe)