Group 1 Admin Command Set的第四项是Create & Delete IO Queue测试。
Case1:Basic Operation
- 测试方法:
- Host发送1个Create IO CQ command给SSD
- Host发送1个Create IO SQ command给SSD
- Host向创建的这些Queue里发送10个Read command
- Host发送 1个Delete IO SQ command给SSD (指定Queue ID为之前创建的Queue),删除步骤2创建的SQ
- Host发送 1个Delete IO CQ command给SSD(指定Queue ID为之前创建的Queue),删除步骤1创建的SQ
- 期望结果:
- SSD完成每一个Create或者Delete IO Queue命令后,正常返回CQ
- 检查IO Queue被正确Create或者Delete
- 所有Reserved bit填充0
Case2: Create IO CQ with QID=0h, exceeds Number of Queues reported, Identifier already in Use
- 测试方法:
- Host发送Get Feature Command (Feature ID=07h), 获取记录SSD支持的Queue的数量;
- Host发送1个Create IO CQ command给SSD,将QID设为0;
- Host发送1个Create IO CQ command给SSD,将QID设为大于SSD支最大Queue数量的值;
- Host 发送2个Create IO CQ command给SSD,QID设置为相同值。
- 期望结果:
- 针对步骤1,2和步骤3的第二个命令,SSD都应该返回错误 – Invalid Queue ID
Case 3: Delete IO CQ before deleting corresponding SQ
- 测试方法:
- Host发送1个Create IO CQ command给SSD
- Host发送1个期望结果: Create IO SQ command给SSD
- Host向创建的这些Queue里发送10个Read command
- Host发送 1个Delete IO CQ command给SSD(指定Queue ID为之前创建的Queue),删除步骤1创建的SQ
- Host发送 1个Delete IO SQ command给SSD (指定Queue ID为之前创建的Queue),删除步骤2创建的SQ
- Host发送 1个Delete IO CQ command给SSD(指定Queue ID为之前创建的Queue),删除步骤1创建的SQ
- 期望结果:
- 针对步骤4的Delete IO CQ command, SSD返回错误 – Invalid Queue Deleting
Case 4: Create IO CQ with Invalid Queue Size
- 测试方法:
- Host读取Capabilities寄存器 MQES字段,获取并记录SSD支持的最大Queue Size;
- Host发送1个Create IO CQ command给SSD,将Queue Size设为0;
- Host发送1个Create IO CQ command给SSD,将Queue Size设为超过SSD支持的最大值;
- 期望结果:
- 针对这两种情况,SSD返回错误 — Invalid Queue Size
Case 5:Create IO SQ with Invalid Queue Size
- 测试方法:
- Host读取Capabilities寄存器 MQES字段,获取并记录SSD支持的最大Queue Size;
- Host发送1个Create IO CQ command给SSD;
- Host发送1个Create IO SQ command给SSD,将Queue Size设为0;
- Host发送1个Create IO SQ command给SSD,将Queue Size设为超过SSD支持的最大值;
- 期望结果:
- 针对这两种情况,SSD返回错误 — Invalid Queue Size
Case 6: Create IO SQ with Physically Contiguous
- 测试方法:
- 读取SSD的Capabilities Register CAP.CQR 字段,如果CQR为0,本case无效;如果为1,继续后面步骤;
- Host发送1个Create IO CQ command 给SSD;
- Host发送1个Create IO SQ command给SSD,并将PC bit设为0;
- 期望结果:
- SSD返回错误 – Invalid Field in Command
Case 7:Create IO SQ Invalid
- 测试方法:
- Host发送1个Create IO CQ command 给SSD;
- Host发送1个Create IO SQ command给SSD,并将CQID设为0h;
- Host发送1个Create IO SQ command给SSD,并将CQID设为非0的无效值(与之前Create CQ command定义的ID不同);
- 期望结果:
- 针对步骤2,SSD返回错误 – Invalid Queue ID;
- 针对步骤3,SSD返回错误 – Completion Queue Invalid;
Case 8:Create IO CQ Invalid Interrupt Vector
- 测试方法:
- 读取SSD的MC.MME 和 MSIXCAP.MXC.TS字段;
- Host 发送1个Create IO CQ command, 并将Interrupt Vector值设置为超过SSD支持的最大值;
- 期望结果:
- SSD返回错误 – Invalid Interrupt Vector
Case 9: Create Io CQ Invalid Queue Address Offset
- 测试方法:
- 读取SSD的MPS寄存器;
- Host 发送1个Create IO CQ command, 将其第一个PRP List Entry设置成非Qword对齐;
- 期望结果:
- SSD返回错误 – Invalid PRP Offset
Case 10: Create Io SQ Invalid Queue Address Offset
- 测试方法:
- 读取SSD的MPS寄存器;
- Host 发送1个Create IO SQ command, 将其第一个PRP List Entry设置成非Qword对齐;
- 期望结果:
- SSD返回错误 – Invalid PRP Offset