购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.3 测试标准制定

测试用例描述了测试目标和测试方法,还需要给出对应的通过标准。SSD测试标准的制定方法主要有以下几种。

1.直接采用PRD中的指标作为测试标准

在PRD中已经明确给出的指标,例如性能和功耗指标等,可以直接作为测试标准。表2-12所示的是某款PCIe Gen3 SSD的PRD内容,对Iometer下SSD的性能给出了明确的指标,可以直接作为测试标准。

表2-12 某款SSD的PRD对Iometer测试下的性能要求

2.根据行业规范制定测试标准

SSD需要符合行业标准,主要的行业标准包括以下几种。

(1)JEDEC标准

JEDEC(Joint Electron Device Engineering Council,电子元件工业联合会)又称国际半导体器件标准机构,是全球最大的电子行业标准制定机构,致力于为电子行业提供技术上可信赖、不断优化的标准。其标准涵盖消费电子产品、微型计算机、计算机内存、影像传感、无线通信等领域,是国际电子行业半导体器件的重要参考标准。存储领域的DDR、LPDDR、SSD都需要符合JEDEC相关标准,其中与SSD相关的JEDEC标准包括以下几个。

JESD 218标准是由JEDEC制定的SSD耐用性测试标准,其全称是固态硬盘需求和耐用性测试方法(SSD Requirement and Endurance Test Method),顾名思义,协议里规定了消费级和企业级SSD耐用性测试需求和测试方法。JESD 218标准主要包括以下内容。

总写入字节数(Total Bytes Write,TBW) :写入SSD的总数据量,是耐久性的一个重要指标。

数据保持(Data Retention) :断电情况下SSD能够保持数据的能力。

耐久性(Endurance) :SSD能够承受的数据重写的能力,其重要指标是TBW。

累计功能性错误(Function Failure Requirement,FFR) :写入过程中产生累计功能性错误的统计值。

循环擦写次数(Program/Erase Cycle,PE Cycle) :FLASH块的写入/擦除循环次数。

不可修复的错误比特率(Uncorrectable Bit Error,UBER) :一种数据损坏率的衡量标准,等于在应用了任意特定的错误纠正机制后依然产生的每比特读取数据的错误数量占总读取数量的比(概率)。

WA :WA代表的含义就是NAND实际写入数据量与主机写入量的比值,最理想的情况就是WA=1,这个值越接近1越好。

工作负载(Workload) :测试时使用的读写序列,即JESD 219规定的工作负载。

SSD容量(SSD capacity) :SSD容量的计算方法,沿用IDEMA规定的HDD容量计算方法。

JESD 218标准还规定了对企业级和消费级SSD耐久性(Endurance)的要求,同时提供了耐久性(Endurance)和数据保持(Retention)的测试方法,介绍了直接法(Direct Method)和推理法(Extrapolation Method)。使用标准统一的测试方法,有助于公开、公平、公正地评估SSD的耐久性,也更便于对比不同厂商的固态硬盘产品。

JESD 219全称是SSD Endurance Workload,即固态硬盘耐用性工作负载。JESD 219规定的工作负载可以被当做测试SSD最标准的工作负载。SSD的RDT测试也是采用了该工作负载。JESD 219工作负载模拟了客户端环境中的实际使用情况(消费级和企业级SSD会有差异,因此在JESD 219中被分开描述),并提供了基于此目标的Test Trace,该Test Trace可被重复运行。Test Trace可被理解为LBA的读写足迹。Trace Lib中存在多个Test Trace,每个Test Trace对应于特定的SSD容量。这意味着针对不同的SSD容量,需要使用相应的Test Trace来进行评估,从而更准确地反映出不同容量下的SSD性能和行为特征。

JESD 218标准给出了耐久性测试的方法,而JESD 219给出了标准工作负载,在这两份标准的指导下对SSD进行评估测试,确保不同厂商的SSD可以在相同的测试条件下进行比较,这样得出的结果更加公正。上述两个标准都可以在JEDEC官网https://www.jedec.org/查询到。

在SSD测试中,JESD 218和JESD 219都是必须要被遵循的,一般使用RDT设备进行测试。关于RDT测试设备,将在后文介绍。

(2)行业或团体制定的SSD标准规范

一些行业或团体,结合本领域对SSD的需求及使用场景的特点,也制定了一些SSD标准规范,例如视频监控行业的GA/T 1357—2018《公共安全视频监控硬盘分类及试验方法》等国内标准,相关介绍参看第8章。

(3)接口、总线及协议标准

我们常常听到各种不同的SSD叫法,比如SATA SSD、PCIe SSD、NVMe SSD、M.2 SSD、U.2 SSD等。要理解这些叫法,首先要搞清楚接口形态、总线、协议三者的概念,以及它们彼此之间的关系,因为这些叫法就是围绕这些维度描述的。

1) 接口形态 :SSD接口形态和尺寸在英文中表述为SSD Form Factor。由于SSD是标准件,必须符合一定的接口规范、尺寸和电气特性,这样才能保证不同厂家的产品都能被使用到同一个环境中。厂商和标准化组织共同制定了SSD的Form Factor规范,SSD厂商和系统厂商都需遵守该规范。不同类型的SSD的Form Factor也不一样,消费级SSD目前主要用M.2 2280,其中M.2是盘片与主机之间的插口类型,而2280是指SSD的长宽尺寸长80mm宽22mm。M.2接口还可插入其他尺寸的SSD,比如M.2 2242、M.2 2230。而企业级PCIe盘的接口形态也有多种,比如U.2、E1.S、E1.L、E3.S等。

2) 总线 :在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。SSD与主机之间进行连接的总线类型有:SATA、PCIe、SAS等。每种总线对应的接口类型不尽相同,SAS总线的盘只能使用SAS接口;SATA总线的盘既可以使用SATA、mSATA接口,也可以与SAS接口兼容;而PCIe总线支持的接口类型就很多了,比如消费级常见的M.2接口,以及企业级盘常用的U.2、E1.S、E1.L、E3.S接口等,都可以用于PCIe SSD。

表2-13~表2-15列出了SATA 3.0、PCIe3.0/4.0/5.0、SAS 3.0的主要参数。对SSD进行性能测试时,需考虑实测结果是否符合各类接口的理论性能。

表2-13 SATA 3.0总线参数

表2-14 PCIe总线类型及主要参数

表2-15 SAS 3.0总线参数

3) 协议 :SCSI和NVMe是目前最常见的SSD协议。SCSI主要用于SATA SSD,而NVMe则主要用于PCIe SSD。

常见的接口形态、总线和协议及其关系如表2-16所示。

表2-16 SSD常见的接口形态、总线及协议及其关系

(续)

协议测试主要针对SSD的协议规范性和功能符合性进行验证。不同的SSD接口形态需验证不同的协议,比如对NVMe协议、SATA协议、PCIe协议(底层协议)的测试等。

以NVMe协议测试为例,包括但不限于以下测试内容。

创建/删除IO队列(Create/Delete IO Queue) :测试SSD对创建和删除IO队列的支持情况,这是NVMe协议中用于管理命令队列的一部分。

异步事件请求(Async Event Request) :验证SSD对异步事件的处理功能。

设备自检(Device Self Test) :测试SSD的自我诊断功能,确保设备能够检测并报告潜在的问题。

控制器能力(Controller Capabilities) :检查SSD控制器的功能和性能限制,如队列深度、队列个数和命令类型支持等。

识别(Identify)命令 :测试SSD的识别(Identify)命令响应,获取设备信息,如型号、序列号和固件版本等。

日志获取(Get Log) :验证SSD对日志命令的支持,包括获取和设置日志,这些日志可能包含错误记录、性能统计等信息。

设置特性(Set Feature) :通过Set Feature命令可以对SSD进行各种高级功能的设置和配置。

获取特性(Get Feature) :通过Get Feature命令获取NVMe设备的特性及其值。使用该命令时,需要指定要查询的特性名称,然后设备将返回该特性的值。

比较(Compare)/刷新(Flush)命令 :测试SSD对比较、刷新命令的支持,这些命令用于数据的读写操作和数据一致性检查。

数据集管理(Data Set Management) :检查Trim操作的结果是否符合预期。

固件下载(Firmware Download) :验证SSD固件下载功能,确保固件更新过程的安全性和正确性。

格式化NVM(Format NVM) :测试SSD对NVM(Non-Volatile Memory)格式化命令的支持。

NVM子系统重置(NVM Subsystem Reset) :验证SSD的重置功能,确保设备能够恢复到初始状态。

电源状态管理(Power States) :检查SSD的电源状态管理功能,包括设备的休眠、唤醒和电源节能模式。

……

测试开发人员可以根据NVMe协议规范提取测试用例点,完成测试用例设计和脚本设计,再进行测试。一般的商业测试工具带的协议测试用例库只是一些基础功能的验证,测试场景考虑未必全面,还需要测试团队自行补充。目前国内一些SSD研发企业的NVMe协议测试用例数量可以达到2 000个以上。

下面例举一个NVMe1.4a协议的测试用例。

1)测试用例点提取:分析协议中的要求,提取测试用例点。例如,协议中“NVM Express Revision 1.4a March 9, 2020.Page 101.Figure 151”中有如下描述“if the value specif ied is 0h, exceeds the Number of Queues reported, or corresponds to an identif ier already in use, the controller should return an error of Invalid Queue Identif ier”。这段描述可以提取成一个测试用例点,进行测试用例设计。

2)测试用例设计目标是使用无效Queue ID创建IO Completion queue,测试用例的具体步骤如下。

步骤1 :创建一个Queue ID是5的IO Completion queue,预期命令成功完成。

步骤2 :创建一个Queue ID是0的IO Completion queue,预期命令执行失败(Queue ID 0,是Admin queue ID,IO queue不能使用)。

步骤3 :创建一个Queue ID是0xffff的IO Completion queue,预期命令执行失败(Queue ID边界值,越界)。

步骤4 :创建一个Queue ID值大于设备支持的queue的个数的IO Completion queue,预期命令执行失败(Queue ID越界)。

步骤5 :创建一个已有相同Queue ID IO CQ的IO Completion queue,预期命令执行失败(Queue ID重复使用)。

步骤6 :删除创建的IO Completion queue脚本实现。

脚本中会调用一些测试接口,实现一些功能,比如命令组包、发送命令和状态查询等。这些测试接口被封装在lib库中(库里提供各类测试接口),供脚本开发人员调用。测试部门除了负责开发测试脚本外,也需要开发这些测试接口。在本例的脚本代码中(参看下面的脚本代码),IOCQ函数是PyNVMe3提供的Metamode测试接口,已经被封装在测试工具的lib库中,测试开发人员需要知道写脚本时如何使用这类接口。

def test_queue_create_cq_with_invalid_id(nvme0, ncqa):

# create a cq which queue id is 5, and it shall complete successfully

cq = IOCQ(nvme0, 5, 10, PRP(4096))

cq.delete()

# create a cq which queue id is 0, and it shall complete with error

with pytest.warns(UserWarning, match="ERROR status: 01/01"):

IOCQ(nvme0, 0, 10, PRP(4096))

# create a cq which queue id is 0xffff, and it shall complete with error

with pytest.warns(UserWarning, match="ERROR status: 01/01"):

IOCQ(nvme0, 0xffff, 10, PRP(4096))

# create a cq whose queue id is larger than supported number of queue, and it shall complete with error

with pytest.warns(UserWarning, match="ERROR status: 01/01"):

IOCQ(nvme0, ncqa+1, 10, PRP(4096))

with pytest.warns(UserWarning, match="ERROR status: 01/01"):

IOCQ(nvme0, ncqa+0xff, 10, PRP(4096))

# create a cq which queue id is duplicated cqid, and it shall complete with error

cq = IOCQ(nvme0, 5, 10, PRP(4096))

with pytest.warns(UserWarning, match="ERROR status: 01/01"):

IOCQ(nvme0, 5, 10, PRP(4096))

# delete the CQ

cq.delete()

3.认证、测试相关组织及其标准

认证测试可以确保SSD的性能、兼容性和可靠性等符合行业标准。可以将通过某一个认证测试作为一个测试标准。

以下是一些主要的SSD认证测试。

(1)SNIA

SNIA(Storage Networking Industry Association,存储网络行业协会)是一个国际认证组织,为Client SSD和Enterprise SSD制定了性能测试规范。SNIA认证的内容可以在官方网站www.snia.org查看。通过SNIA认证,意味着该SSD产品得到了该协会的认可。

SNIA认证涉及以下几个关键概念。

FOB(Fresh Out of Box) :在一些SSD测试用例中,会要求在测试前将SSD盘片重置为FOB状态。FOB是指从包装里拆出来的全新SSD,因为此时NAND没有被磨损,盘片也处于空盘状态,此时SSD被认为是性能最好的状态。所谓将SSD重置为FOB状态,简单的操作是将整盘进行SE(Security Erase,安全擦除),经过安全擦除的SSD也近似于FOB状态。

转换(Transition) :经过一段的读写,SSD逐步趋向于稳定状态,这个过程称为转换状态。

稳态(Steady State) :SSD的工作特性稳定在一个区间,企业级SSD的Perfor-mance测试,例如Throughput(吞吐量)、IOPS、Latency,都必须在Steady State状态下获取,据此得到SSD盘的真实性能。

擦除(Purge) :每次进行Performance测试前,都必须进行Purge动作。目的是消除此前其他操作(读写,其他测试)对SSD带来的影响。比如,一段小block size的随机读写之后立即进行大block size的顺序读写,这时候大block size的性能会比较差。为了避免这种情况,测试前必须经过Purge操作,从而保证每次测试时盘都是从一个固定的状态下开始。简单来说,可以把Purge理解为让盘回到类似FOB的状态。

前提(Precondition) :通过提前对SSD进行IO读写,使其逐步进入稳态(Stead State),然后再进行下一步的测试。

饱和写测试(Write Saturation Test,WSAT) :对SSD进行长时间的Random 4K写操作,评测其经过长期写入后的Performance表现。

一些商业测试工具覆盖了SNIA测试项目,可以直接使用这些工具进行SNIA测试,例如前文提到的ULINK、SANBlaze、Oakgate、德咖、鸾起等。

(2)SATA-IO Plugfest和IW

SATA-IO作为SATA协议的官方组织,每年都会组织厂商一起坐坐,给大家一个互相切磋的机会,进行兼容性、交互性及新功能的测试。SATA-IO测试的主要内容包括IW(Interoperability Workshop)和Plugfest。IW的对象是量产产品,由SATA-IO主导,有固定的测试流程和项目,并且测试结果需要提交SATA-IO,通过测试的设备可以加入该组织的Integrators List。Plugfest的测试对象可以是开发阶段的SSD产品,测什么以及怎么测各类厂商说了算,SATA-IO不关心测试结果。

SATA-IO官方网站如下。

● Plugfest相关:https://www.sata-io.org/plugfests

● IW相关:https://www.sata-io.org/interoperability-workshops

(3)PCI-SIG

PCI-SIG(Peripheral Component Interconnect Special Interest Group,外围部件互连专业组)是PCIe协议的官方组织,其定义的PCIe一致性测试项目包括以下方面。

电气信号测试(Electrical Testing) :针对平台和卡的Tx和Rx电器性能进行测试。

配置测试(Conf iguration Testing) :测试工具一般使用PCIECV。

链路层协议测试(Link Protocol Testing) :针对设备进行链路层协议测试。

传输层协议测试(Transaction Protocol Testing) :针对设备进行传输层协议测试。

平台BIOS测试(Platform BIOS Testing) :针对平台BIOS进行测试,能否识别并正确配置设备。

通过PCI-SIG测试的SSD可以加入该组织的Integrators List。在PCI-SIG的官方网站上提供测试指导书(Test Guide)的下载,指导书中包括了测试描述、规格、流程及相关的工具,网址:https://pcisig.com/developers/compliance-program。

(4)UNH-IOL

UNH-IOL(有时也简称为IOL)全称是University of New Hampshire Inter Operability Laboratory,是业界著名的公开实验室,提供多个领域的测试服务。UNH-IOL定义了NVMe 测试套件,包括NVMe一致性测试套件和NVMe互操作性测试套件。测试套件会跟着NVMe协议更新而持续更新,厂商可以自行下载使用,下载链接:https://www.iol.unh.edu/testing/storage/nvme。

如图2-12所示,UNH-IOL提供的NVMe测试服务包括对各类操作系统、驱动程序和硬件平台、PCIe SSD和PCIe服务器的一致性和互操作性测试。这些测试有助于促进NVMe产品符合NVMe Integrators List(集成商名单)的要求。

图2-12 UNH-IOL提供的存储测试

UNH-IOL中,针对NVMe PCIe SSD测试服务包括以下方面。

● 使用IOL INTERACT PC Edition软件进行一致性测试。

● 使用IOL INTERACT Teledyn LeCroy版软件进行一致性测试。

● 互操作性测试。

● 组织SSD厂商参加Plugfest活动。Plugfest是一个协作类测试活动,它将行业领先的厂商们聚集在一起,共同定义测试内容和测试标准,提供进行互操作测试的机会。

通过上述前三项测试的SSD产品可被官方列入NVMe Integrator's List中。

(5)Intel RVP和微软WHQL认证

SSD作为PC的重要部件,Intel和微软也分别提供了相关认证。Intel提供EVO认证,微软提供WHQL认证。这部分内容可以参考2.2.2节中第6条“认证测试环境”。

(6)ULINK

ULINK公司是存储行业知名的测试工具厂商,其主要的产品包括DriveMaster、PCIe-SSD Power Adapter(PSPA)、TCG Storage Certif ication等。通过对应的测试可以拿到相应的认证。一些客户会要求SSD供应商提供相关功能的测试报告。 bURMnifQ9vAIfpx6449bjzCOISTNLcx1+3VmI/SJpncMN7m1NrDSkWtVz4kWD1u6

点击中间区域
呼出菜单
上一章
目录
下一章
×