UNH-IOL Reservation 一致性测试用例【2】- 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

Test 7.2 – Reservation Registration (M, OF-FYI)

在 namespace 上建立 reservation 之前,host 应该先通过注册一个 reservation key 来成为该 namespace 的 registrant。注册一个 namespace 的 reservation key, 就是为 namespace 和 host 建立一个联系。host 只需在单个 controller 上注册,即可成为 NVM Subsystem 中可访问该 namespace 并与 host 相关联的所有 controllers 上 namespace 的 registrant。

host 注册 reservation key 的方式是透过 Reservation Register 命令,其中,指定 namespace id, 并将 Reservation Register Action (RREGA) 字段置为 000b (i.e., Register Reservation Key),并为 New Reservation Key (NRKEY) 字段提供一个 reservation key(自己任意指定,只要不与之前的 key 重复)。

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

Case 1: Basic Operation (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 向 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

注意事项

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

Case 2: Re-registration (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 的每个 shared 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 再发和 1 一样的命令,各个字段与1完全一致
      3. Host 发一个 Reservation Report 命令
      4. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,这个 key 与 1,2 不同
      5. 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 已经成功注册到该 namespace
  3. 最后一次 Reservation Register 命令的 cqe 返回 Status Code: Reservation Conflict
  4. 在第二次 Reservation Report 完成后,检查 Reservation Status data structure,reservation key 没有变化

注意事项

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

Case 3: Replace Registration Key (M, OF-FYI)

如果 Host 已经是 namespace 的 registrant, 那么它可以通过 Reservation Register 命令来替换该 namespace 现有的 reservation key,只需将 RREGA 字段设为 010b (i.e., Replace Reservation Key),在 Current Reservation Key (CRKEY) 中天上当前的 reservation key,并在NRKEY 字段设定新的 reservation key。如果 CRKEY 字段与当前 host 的 key 不匹配,那么 Reservation Register 命令会被中断,返回 Reservation Conflict 的状态码。

Host 可以替换它的 reservation key 而不管当前的 registration 状态或当前的 reservation key,只需要在 Reservation Register 命令中将 Ignore Existing Key (IEKEY) 位置为1。将 IEKEY 位设为 1 会让 Reservation Register 命令成功执行而忽略 CRKEY 的值。

替换 Reservation key 不会对 namespace 上可能持有的 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 的每个 shared 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 Register 命令, 将 RREGA 字段设为 010b (i.e. Replace Reservation Key),在 Current Reservation Key (CRKEY) 字段中填上当前的 reservation key,在 NRKEY 字段中向 NVMe Controller 发送新的 reservation key,以便将新的 reservation key 与 namespace 的 registrant 关联。
      3. Host 发一个 Reservation Report 命令
      4. Host 发送 Reservation Register 命令,将 RREGA 字段设为 010b (i.e. Replace Reservation Key),在 CRKEY 字段中提供除当前真正的 reservation key 以外的任意 reservation key, 并在 NRKEY 字段中向 NVMe Controller 发送新的 reservation key。然后,发送 Reservation Acquire 命令,RType 字段设为 2。
      5. Host 发一个 Reservation Report 命令
      6. Host 获取该namespace 的 reservation:Host 发送 Reservation Acquire 命令,Reservation Acquire Action (RACQA) 字段设为 000b (Acquire),并为 Current Reservation Key (CRKEY) 提供与 host 相关联的当前的 reservation key
      7. Host 发送 Reservation Register 命令,为 New Reservation Key (NRKEY) 提供一个新的 reservation key, 将 IEKEY 位设为1,以便于使用不同的 reservation key 使 host 成为该 namespace 的 registrant。
      8. Host 发一个 Reservation Report 命令
  3. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. NVMe Controller 在第二条 Reservation Registration 命令后完成 Reservation Report 命令后返回的 Reservation Status data structure 是表明 Host 成功更改了其 reservation key。
  3. 第 4 步的 Reservation Register 命令返回 Reservation Conflict 状态码
  4. NVMe Controller 在第三条 Reservation Registration 命令后完成 Reservation Report 命令后返回的 Reservation Status data structure 是表明 Host 没有更改其 reservation key。
  5. NVMe Controller 在第四条 Reservation Registration 命令后完成 Reservation Report 命令后返回的 Reservation Status data structure 是表明 Host 成功更改了其 reservation key,并且它依然持有之前获取的 reservation

注意事项

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

Case 4: Multiple Hosts (FYI) Dual Port Devices Only

对具有不同 Host Identifiers 的 host 使用的 reservation key 值没有限制。例如,多台 hosts 可以注册相同的 reservation key 值。
该测试要求 NVM Subsystem 中至少有两个具有 shared namespace 的 controllers。

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. Host 1 向 NVMe Controller 1 发出 Set Features Host Identifier 命令,以便为该 Controller 设置 Host Identifier。
  3. Host 2 向 NVMe Controller 2 发出 Set Features Host Identifier 命令,设置与 Host 1 不同的 Host Identifier。
  4. Host 1 发出 Reservation Register 命令,Reservation Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 NVMe Controller 1 提供 shared namespace 的 reservation key,使 Host 成为该 namespace的 registrant。
  5. Host 2 发出 Reservation Register 命令,Reservation Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 NVMe Controller 2 提供NVMe Host 1用过的 shared namespace 的 reservation key,使 Host 成为该 namespace的 registrant。
  6. Host 1 向 Controller 1 发送一个 Reservation Report 命令
  7. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 在每个命令完成后,控制器向相关的 Completion Queue 发布一个 completion queue entry,表明该命令的状态
  2. NVMe Controller 在完成 Reservation Report 命令后返回的 Reservation Status data structure 表明两个 Hosts 成功注册到了该 namespace。

Case 5: Reservation Persistence (FYI, OF-FYI)

测试步骤

  1. 检查 Identify controller data structure(CNS 01) ONCS 字段确定 controller 是否支持 reservation
  2. 针对 NVMe Subsystem 里的每个 NVMe Controller,NVMe Host 向 Controller 发出 Set Features Host Identifier, 以便为该 Controller 注册一个 Host Identifier
  3. 对于 atttach 到该 Controller 的每个 shared namespace:
    1. Get Features Reservation Persistence,将SEL=3,如果是 not changeable,就不适用本测试。Host 发送set features Reservation Persistence,将PTPL=0
    2. Host 发送 get features Reservation Persistence,验证 PTPL 值为 0
    3. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,以使 host 成为该 namespace 的 registrant,并将 CPTPL 设为 00b (No change to PTPL state)
    4. Host 发送 get features Reservation Persistence,验证 PTPL 值为 0
    5. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,以使 host 成为该 namespace 的 registrant,并将 CPTPL 设为 11b (Set PTPL state to ‘1’)
    6. Host 发送 get features Reservation Persistence,验证 PTPL 值为 1
    7. Host 发 Reservation Register 命令,Register Action (RREGA) 字段设为 000b (即. Register Reservation Key),在 New Reservation Key (NRKEY) 字段中向 namesapce 的 NVMe Controller 提供 reservation key,以使 host 成为该 namespace 的 registrant,并将 CPTPL 设为 10b (Set PTPL state to ‘0’)
    8. Host 发送 get features Reservation Persistence,验证 PTPL 值为 0
    9. Host 向 Controller 发送一个 Reservation Report 命令
  4. 对所有 Reservation Controllers 执行 Reservation Release 命令,将 RRELA 字段设为 1(Clear)

预期结果

  1. 步骤 3.2, 3.4, 3.8 的 PTPL 值为 0
  2. 步骤 3.6 的 PTPL 的值为 1

回到顶部

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