UNH IOL的全称是University of New Hampshire Interoperability Laboratory,中文翻译过来就是新罕布什尔大学互操作性实验室。从2012年开始UNH IOL与NVMe组织联合开始推出NVMe Conformance Test (NVMe一致性测试)。
前期SSDFans曾经简单介绍过UNH IOL测试, 但是阿呆表示没有体现深入浅出的精神,要求进一步深挖,并许诺文章写的好的话来年xxx,xxx云云。领导的指示要全心全意的落实,就拿出面壁思过的精神学习一下UNH IOL NVMe一致性测试的具体项目。
这里系列可能会很长,有时间我们就整点。
我们先从UNH IOL PC Edition 开始,这是一个Linux下GUI测试程序,启动后从界面里可以看到,测试项目一共有10个Group,分别是:
- Group 1: Admin Command Set
- Group 2: NVM Command Set
- Group 3: NVM Features
- Group 4: Controller Registers
- Group 5: System Memory Structure
- Group 6: Controller Architecture
- Group 7: Reservations
- Group 8: Autonomous Power State Transitions
- Group 9: Namespace Management
- Group 10: PCI Express Capability Registers
Group 1: Admin Command Set主要是测试NVMe的Admin command命令集,一共有9个case,分别测试:
- Identify Command
- Set/Get Feature
- Get Log Page Command
- Create/Delete IO SQ & CQ
- Abort Command
- Format NVM Command
- Asynchronous Event
- Get Feature Select
- Feature saved across reset
Group1 Admin Command Set的第一项是Identify Command,一共有5个case,分别是:
- Case1: Identify Namespace Data Structure
- 测试方法:向该SSD的每一个Namespace发送Identify命令,将CNS设置为00h (Identify Namespace)
- 期望结果:
- SSD正确返回Namespace data structure,Admin CQ收到CQ post
- 对于无效的Namespace ID,SSD返回的Namespace data structure应该为全“0”填充
- Namespace data structure所有Reserved Field的值应该为“0”
- 假设NLBAF(Number of LBA format)位值为n,Namespace data structure的Bytes 128 – 191指定的各个LBA Format中,从第n+1个开始,其内容应该为全“0“
- Case2: Identify Controller Data Structure
- 测试方法:向该SSD发送Identify命令,将CNS设置为01h (Identify Controller)
- 期望结果:
- SSD正确返回controller data structure,Admin CQ收到CQ post
- 返回的data structure所有Reserved Field的值应该为“0”
- 如果SSD支持NVMe 1.2或者更高版本,检查CAP Register与Controller Data Structure里声明的版本是否一致
- 假设SSD支持的Power State数量为n,从第n+1开始的Power State,其Descriptor所有位应该为全“0“
- 所有的返回的ASCII字符串都是靠左对齐并且用空格填充
- Case3: Namespace List
- 测试方法:
- 向该SSD发送Identify命令,将CNS设置为02h, 并且NSID=0 (要求SSD返回Namespace List)
- 对Namespace List里列出的每一个Namespace,发送Identify命令,其CNS位值为00h (Identify Namespace)
- 期望结果:
- SSD正常返回Namespace List,Admin CQ收到CQ post
- 针对每一个Identify Namespace命令,SSD正常返回Namespace data structure,且均为非0填充
- 返回的data structure所有Reserved Field的值应该为“0”
- Case4: Identify to invalid Controller ID
- 测试方法:针对每个Namespace,发送Identify命令,将DW10中的CNTID(Controller ID)设置为无效值
- 期望结果:
- SSD返回CQ,Status Code =02h (”Invalid Field in command”)
- Case5: Identify to reserved CNS Value
- 测试方法:针对每个Namespace,发送Identify命令,将CNS设置为 FFh
- 期望结果:
- SSD返回CQ,Status Code =02h (”Invalid Field in command”)
- Case6: Namespace Identification Descriptors (仅针对支持版本3以上的SSD)
- 测试方法:
- 测试方法:针对每个Namespace,发送Identify命令,将CNS设置为 03h,以使SSD返回该Namespace 的Identification Descriptors data structure
- 期望结果:
- 检查SSD返回的Identification Descriptors data structure为4096 Byte
确保SSD不会针对某个Namespace ID返回多个Descriptors data structure