固态硬盘SSD性能测试方法和装置与流程

文档序号:17130431发布日期:2019-03-16 01:07阅读:1068来源:国知局
固态硬盘SSD性能测试方法和装置与流程

本申请涉及存储技术,特别涉及固态硬盘(ssd:solidstatedrives)性能测试方法和装置。



背景技术:

ssd是由固态电子存储芯片阵列制成的硬盘,采用多个闪存芯片的并发读写,提供很好的数据读写性能。

为了确保ssd在上市后仍能保持高性能和高稳定性,常需要在ssd出厂前对ssd进行测试。目前有很多用于测试ssd的测试软件,这些测试软件功能各不相同,各有优缺点,但都不能直接通过模拟真实应用中的复杂情形进行自动化测试。



技术实现要素:

本申请提供了固态硬盘ssd性能测试方法和装置,以通过模拟真实应用中的复杂情形对ssd进行自动化测试。

本申请提供的技术方案包括:

一种固态硬盘ssd性能测试方法,该方法应用于电子设备,包括:

当通过运行与第一性能参数对应的测试脚本测试目标ssd在稳定状态下的第一性能参数时,先对所述目标ssd执行擦盘操作,然后对所述目标ssd执行写操作以使所述目标ssd被写满数据,对所述目标ssd进行至少m轮读写操作处理,依据处理结果判断所述目标ssd是否达到稳定状态,如果是,则依据所述处理结果确定所述目标ssd在稳定状态下的第一性能参数。

一种固态硬盘ssd性能测试装置,该装置包括:

机器可读存储介质,用于存储机器可读指令;

处理器,用于读取所述机器可读指令,并执行所述指令以实现上述的ssd性能测试方法。

由以上技术方案可以看出,本申请中,在测试目标ssd在稳定状态下的第一性能参数时,先通过对目标ssd执行读写操作以明确如何判断所述目标ssd是否达到稳定状态,在明确判断出所述目标ssd达到稳定状态时,依据之前对目标ssd执行读写操作时的结果确定目标ssd在稳定状态下的第一性能参数,最终实现了通过模拟真实应用中的复杂情形(对目标ssd执行读写操作)对ssd进行自动化测试。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1为本申请提供的方法流程图;

图2为本申请提供的测试iops的流程图;

图3为本申请提供的测试tp的流程图;

图4为本申请提供的测试lat的流程图;

图5为本申请提供的测试wsat的流程图;

图6为本申请提供的测试hir的流程图;

图7为本申请提供的测试csr的流程图;

图8为本申请提供的测试ecw的流程图;

图9为本申请提供的测试dirth的流程图;

图10为本申请提供的装置结构图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参见图1,图1为本申请提供的方法流程图。该方法应用于电子设备。在一个例子中,这里的电子设备可为服务器,也可为其他设备,本申请并不具体限定。

在本申请中,电子设备在执行ssd性能测试之前,会预先部署一些配置,比如安装合适的操作系统(linux系统或者windows系统)、安装用于测试ssd且运行正常的测试软件(fio或iometer)等。

在一个例子中,可预先记录电子设备部署的上述配置,以便将上述配置增加到最终的测试报告便于识别和分析,下文会进行描述,这里暂不赘述。

在另一个例子中,也可进一步记录目标ssd的配置等信息,以便将目标ssd的配置等信息增加到最终的测试报告便于识别和分析,下文会进行描述,这里暂不赘述。其中,在电子设备安装的操作系统为linux系统时,目标ssd的配置可包括:目标ssd的盘符如/dev/sdc、目标ssd的容量大小、和/或测试目标ssd性能所需的线程数(numjobs)和队列深度(iodepth)等;在电子设备安装的操作系统为windows系统时,目标ssd的配置可包括:目标ssd的名称、目标ssd的容量大小、测试软件iometer的配置文件(icf)中所有的配置(读写,块大小,混合比例,线程数,队列深度,测试时间等)。在本申请中,作为一个实施例,电子设备与目标ssd是直连,以保证测试的目标ssd的性能的真实性。因为电子设备与目标ssd若不是直连,有可能测试目标ssd的性能的速度被限制或损耗,也有可能中间有缓存,速度被放大等,最终导致测试的目标ssd的性能有可能不真实。

本申请中,在准备测试某一硬盘(记为目标ssd)前先对目标ssd做清除(purge)操作。这里,之所以先对目标ssd执行purge操作,原因是:调整目标ssd处于该拆封的新盘(fob:freshofbox)状态,以消除其他操作带来的影响,保证目标ssd的每次测试都是从相同状态开始。

在对目标ssd执行purge操作后,如图1所示,该流程可包括以下步骤:

步骤101,当通过运行与第一性能参数对应的测试脚本测试目标ssd在稳定状态下的第一性能参数时,执行步骤102。

这里,第一性能参数是与目标ssd处于稳定状态相关的性能参数,其具体可为下文描述的i/o读写频率(iops:input/outputoperationspersecond)、吞吐量(tp:throughput)、延时时间(lat:latency)等。需要说明的是,这里的第一性能参数只是为便于描述而进行的命名,并非用于限定。

在本申请中,作为一个实施例,本步骤101可在接收到用于指示测试目标ssd在稳定状态下的第一性能参数的外部控制命令后执行。

在本申请中,作为另一个实施例,本步骤101也可按照预设顺序确定执行步骤101时执行。

需要说明的是,这里与第一性能参数对应的测试脚本是预先准备好的能够实现自动化测试ssd在稳定状态下的第一性能参数的脚本。

其中,在电子设备安装的操作系统为windows系统时,与第一性能参数对应的测试脚本为用于测试目标ssd在稳定状态下的第一性能参数对应的jar文件,当双击该测试脚本时即可运行测试脚本来调用测试软件执行下述步骤102。

在电子设备安装的操作系统为linux系统时,与第一性能参数对应的测试脚本为用于测试目标ssd在稳定状态下的第一性能参数对应的shell文件(可记为iops.s)。当需要运行测试脚本,输入以下命令即可运行测试脚本来调用测试软件以执行下述步骤102:

./iops.shdev/sda162dfiopsresult240g

在上述命令中,dev/sda是指目标ssd的分区名称、16是指队列深度、2表示线程数、df表示中间变量保存文件名、iopsresult表示结果保存文件名、240g表示硬盘容量。

步骤102,先对所述目标ssd执行擦盘操作,然后对所述目标ssd执行写操作以使所述目标ssd被写满数据,对所述目标ssd进行至少m轮读写操作处理,依据处理结果判断所述目标ssd是否达到稳定状态,如果是,则依据所述处理结果确定所述目标ssd在稳定状态下的第一性能参数。

本步骤102中,在对所述目标ssd进行读写操作处理过程中,会定时对处理结果进行判断,下面会通过实施例进行具体描述,这里暂不赘述。

通过步骤102可以看出,本申请在测试目标ssd在稳定状态下的第一性能参数时,先通过对目标ssd执行读写操作以明确如何判断所述目标ssd是否达到稳定状态,在明确判断出所述目标ssd达到稳定状态时,依据之前对目标ssd执行读写操作时的结果确定目标ssd在稳定状态下的第一性能参数,最终实现了通过模拟真实应用中的复杂情形(对目标ssd执行读写操作)对ssd进行自动化测试。

下面通过三个实施例对图1所示流程进行描述:

实施例1:

本实施例1中,第一性能参数为:iops。iops是指每秒对目标ssd进行读写操作(i/o)的次数,反映出目标ssd每秒进行i/o的次数,用于衡量随机访问目标ssd的性能。

参见图2,图2为本申请提供的测试iops的流程图。应用于本实施例1中,上述的测试脚本可为用于测试iops的脚本。

如图2所示,该流程可包括:

步骤201,对所述目标ssd执行擦盘操作。

这里,之所以对目标ssd执行擦盘操作,其目的是自适应从多个性能测试(比如iops、tp、lat等测试)中选择其中一个性能的测试比如iops的测试,不会限制所有性能测试一次性连续执行。

步骤202,对目标ssd执行写操作以使所述目标ssd被写满数据。

在一个例子中,本步骤202可包括:以大小为设定值(以128k为例)的数据块为单位顺序对目标ssd执行k次写操作以使所述目标ssd被写满数据,k大于等于2。以设定值为128k为例,则步骤202具体为:以128k的数据块为单位从目标ssd的逻辑起始地址开始按顺序对目标ssd执行写操作,在执行一次写操作之后,再继续按顺序对目标ssd执行写操作,以此类推,直至写操作的次数达到k。需要说明的是,本步骤202之所以对目标ssd执行k次写操作,其原因是:目标ssd的物理容量可能大于逻辑地址对应的逻辑容量,比如目标ssd的物理容量为260g,逻辑容量为200g,而在对目标ssd执行写操作时,是依赖于逻辑地址执行的,如果执行一次写操作,则有可能只在目标ssd写了200g的数据,出现目标ssd未被写满数据的情况,为避免此情况,则需要对目标ssd执行k次写操作,k可根据实际需求设置。

步骤203,对所述目标ssd进行至少m轮读写操作处理,其中,每一轮读写操作处理包括:以不同大小的数据块为单位,按照不同读写比例在指定时间内对所述目标ssd进行读写操作。

比如,数据块单位的大小有如下8种:

1024k、128k、64k、32k、16k、8k、4k、512b。

每一数据块单位的读写比例(rwmix)有以下7种:

100/0、95/5、65/35、50/50、35/65、5/95、0/100。其中,/的前面表示在指定时间内比如1分钟内执行读操作的比例,/的后面表示在指定时间内比如1分钟内执行写操作的比例。

在执行步骤203时,还有其他默认配置:目标ssd的逻辑地址从0~最大逻辑地址;测试软件的线程数32,队列深度32(关于线程数和队列深度,理论上选择较大性能较好,但是超过测试平台能提供的阈值,则会减慢,所以预留了设置口,给与用户自己配置,当然后续如何测试出哪一个线程和队列深度的组合性能最理想,后续可以配置最理想的线程和队列深度的组合)。

在每一轮读写操作处理中,上述每一数据块单位按照被设置的每一读写比例执行一段指定时间(比如1分钟)。比如,

以1024k为例,以1024k为单位的数据块按照100/0的读写比例执行一分钟;以1024k为单位的数据块按照95/5的读写比例执行一分钟,以此类推,最终以1024k为单位的数据块按照上述所有的读写比例均执行一分钟。

再以128k为例,以128k为单位的数据块按照100/0的读写比例执行一分钟;以128k为单位的数据块按照95/5的读写比例执行一分钟,以此类推,最终以128k为单位的数据块按照上述所有的读写比例均执行一分钟。

再以4k为例,以4k为单位的数据块按照100/0的读写比例执行一分钟;以4k为单位的数据块按照95/5的读写比例执行一分钟,以此类推,最终以4k为单位的数据块按照上述所有的读写比例均执行一分钟。

需要说明的是,上述在每次执行一段指定时间(比如1分钟)时,会记录指定时间内的平均iops、bs和rwmix配置等。

按照上述方式,在执行完m轮后,m可取值为5,则获取每一轮读写操作处理中的目标数据,在一个例子中,所述目标数据为:以大小为第一值比如4k的数据块为单位并按照第一指定读写比例比如0/100在指定时间内写入数据时的平均iops。之后,依据目标数据判断目标ssd是否达到稳定状态。

在一个例子中,依据目标数据判断目标ssd是否达到稳定状态可参考全球网络存储工业协会(snia)的协议标准。具体地,这里,依据目标数据判断目标ssd是否达到稳定状态可包括:判断以下条件1、条件2是否满足,如果是,确定目标ssd达到稳定状态,如果否,确定目标ssd未达到稳定状态。

条件1:[max(y)-min(y)]≤average(y)*20%max(y)为上述m轮读写操作处理中取值最大的目标数据,min(y)上述m轮读写操作处理中取值最小的目标数据,average(y)上述m轮读写操作处理中的目标数据的平均值。

条件2:slope≤10%,slope是利用上述m轮读写操作处理中的目标数据并使用最小二乘法求得的曲线拟合斜率。

需要说明的是,在上述判断目标ssd达到稳定状态时,则停止执行读写操作处理,而当判断目标ssd未达到稳定状态时,则继续执行读写操作处理。其中,每执行一轮读写操作处理,则依据最近执行的前m轮读写操作处理中的目标数据判断以上条件1、条件2是否满足,如满足,则确定目标ssd达到稳定状态,停止执行读写操作处理,如果否,则继续执行下一轮读写操作处理,直至达到最大轮次比如25轮。

在本实施例1中,若达到最大轮次后,目标ssd还未达到稳定状态,则记录未达到稳定状态的log。

需要说明的是,上述在读写操作处理期间是一直连续,获取目标数据和判断目标ssd是否达到稳定状态都是测试脚本自动完成。

步骤204,依据至少一轮读写操作处理中的候选iops确定所述目标ssd在稳定状态下的iops。

在一个例子中,本步骤204可将最后一轮读写操作处理中的目标数据(候选iops)确定为所述目标ssd在稳定状态下的iops。这里,目标数据是最后一轮读写操作处理对应的候选iops。

在另一个例子中,本步骤204可对指定的至少两轮读写操作处理比如最后两轮读写操作处理中的目标数据(候选iops)进行指定运算比如平均运算,将运算结果确定为所述目标ssd在稳定状态下的iops。

至此,完成图2所示流程。

在图2所示流程中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

以上对实施例1进行了描述。

实施例2:

本实施例2中,第一性能参数为:tp。tp是指目标ssd每秒传输的字节数量,用于衡量顺序访问目标ssd的性能。

参见图3,图3为本申请提供的测试tp的流程图。应用于本实施例2中,上述的测试脚本可为用于测试tp的脚本。

如图3所示,该流程可包括:

步骤301与步骤201类似。

步骤302与步骤202类似。

步骤303,对所述目标ssd进行至少m轮读写操作处理,其中,每一轮读写操作处理包括:每一轮读写操作处理包括:先以大小为第二值的数据块为单位对所述目标ssd执行指定时间的读操作,再以大小为第二值的数据块为单位对所述目标ssd执行指定时间的写操作;或者,先以大小为第二值的数据块为单位对所述目标ssd执行指定时间的写操作,再以大小为第二值的数据块为单位对所述目标ssd执行指定时间的读操作。

这里的第二值以128k为例描述。

在执行步骤303时,还有其他默认配置:目标ssd的逻辑地址从0~最大逻辑地址;测试软件的线程数32,队列深度32(关于线程数和队列深度,理论上选择较大性能较好,但是超过测试平台能提供的阈值,则会减慢,所以预留了设置口,给与用户自己配置,当然后续如何测试出哪一个线程和队列深度的组合性能最理想,后续可以配置最理想的线程和队列深度的组合)。

基于上述每一轮读写操作处理的限定,则在每一轮读写操作处理中,可执行以下操作:以128k为单位的数据块按照100/0的读写比例顺序执行一段指定时间(相当于执行读操作一段指定时间)、以128k为单位的数据块按照0/100的读写比例顺序执行一段指定时间(相当于执行写操作一段指定时间)。指定时间以1分钟为例。

按照上述方式,在执行完m轮后,m可取值为5,则获取每一轮读写操作处理中以128k为单位的数据块按照0/100的读写比例顺序执行一段指定时间时的tp(记为参考tp),依据获取的参考tp判断目标ssd是否达到稳定状态。这里,依据获取的参考tp判断目标ssd是否达到稳定状态类似上述实施例1中判断目标ssd是否达到稳定状态的方式,不再赘述。

需要说明的是,在上述判断目标ssd达到稳定状态时,则停止执行读写操作处理,而当判断目标ssd未达到稳定状态时,则继续执行读写操作处理。其中,每执行一轮读写操作处理,则依据最近执行的前m轮读写操作处理中的参考tp,判断以上条件1、条件2是否满足,如满足,则确定目标ssd达到稳定状态,停止执行读写操作处理,如果否,则继续执行下一轮读写操作处理,直至达到最大轮次比如25轮。

在本实施例2中,若达到最大轮次后,目标ssd还未达到稳定状态,则记录未达到稳定状态的log。

需要说明的是,上述在读写操作处理期间是一直连续,获取参考tp,以及判断目标ssd是否达到稳定状态都是测试脚本自动完成。

步骤304,依据至少一轮读写操作处理中的候选tp确定所述目标ssd在稳定状态下的tp。

在一个例子中,本步骤304可将最后一轮读写操作处理中的参考tp确定为所述目标ssd在稳定状态下的tp。这里,最后一轮读写操作处理中的参考tp是最后一轮读写操作处理对应的候选tp。

在另一个例子中,本步骤304可对指定的至少两轮读写操作处理比如最后两轮读写操作处理中的参考tp进行指定运算比如平均运算,将运算结果确定为所述目标ssd在稳定状态下的tp。

至此,完成图3所示流程。

在图3所示流程中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

以上对实施例2进行了描述。

实施例3:

本实施例3中,第一性能参数为:lat。lat是用于衡量目标ssd性能好坏和稳定性的重要指标。

参见图4,图4为本申请提供的测试lat的流程图。应用于本实施例3中,上述的测试脚本可为用于测试lat的脚本。

如图4所示,该流程可包括:

步骤401、步骤402与上述步骤201、步骤202类似。

步骤403与步骤203类似,只不过此时执行步骤403的默认配置中测试软件的线程数为1(单线程),队列深度为1(单队列)。其他都类似。

还有,在步骤403中,数据块单位的大小可不同于步骤203描述的,比如可有如下3种:8k4k0.5k。每一数据块单位的读写比例(rwmix)可不同于步骤203描述的,比如有以下3种:100/0、65/35、0/100。

本步骤403中,在每一轮读写操作处理中,上述每一数据块单位按照被设置的每一读写比例执行一段指定时间(比如1分钟)。上述在每次执行一段指定时间时,会记录指定时间内的lat。

在执行完m轮后,m可取值为5,则获取每一轮读写操作处理中的参考lat,在一个例子中,所述参考lat为:以大小为第一值比如4k的数据块为单位并按照第一指定读写比例比如0/100在指定时间内写入数据时的lat。之后,依据参考lat判断目标ssd是否达到稳定状态。

在一个例子中,依据参考lat判断目标ssd是否达到稳定状态类似实施例1描述的判断目标ssd是否达到稳定状态,这里不再赘述。

需要说明的是,在上述判断目标ssd达到稳定状态时,则停止执行读写操作处理,而当判断目标ssd未达到稳定状态时,则继续执行读写操作处理。其中,每执行一轮读写操作处理,则依据最近执行的前m轮读写操作处理中的参考lat,判断以上条件1、条件2是否满足,如满足,则确定目标ssd达到稳定状态,停止执行读写操作处理,如果否,则继续执行下一轮读写操作处理,直至达到最大轮次比如25轮。

在本实施例2中,若达到最大轮次后,目标ssd还未达到稳定状态,则记录未达到稳定状态的log。

需要说明的是,上述在读写操作处理期间是一直连续,获取参考lat,以及判断目标ssd是否达到稳定状态都是测试脚本自动完成。

步骤404,依据至少一轮读写操作处理中的候选lat确定所述目标ssd在稳定状态下的lat。

在一个例子中,本步骤404可将最后一轮读写操作处理中的候选确定为所述目标ssd在稳定状态下的lat。这里,最后一轮读写操作处理中的参考lat是最后一轮读写操作处理对应的候选lat。

在另一个例子中,本步骤304可对指定的至少两轮读写操作处理比如最后两轮读写操作处理中的参考lat进行指定运算比如平均运算,将运算结果确定为所述目标ssd在稳定状态下的lat。

至此,完成图4所示流程。

在图4所示流程中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

以上对实施例3进行了描述。

需要说明的是,上述三个实施例均以测试与目标ssd处于稳定状态相关的性能参数为例,下面再描述如何测试与目标ssd处于稳定状态无关的性能参数,其中,以下5个实施例中涉及的与目标ssd处于稳定状态无关的性能参数只是举例,并非用于限定。

实施例4:

本实施例4中,与目标ssd处于稳定状态无关的性能参数为饱和写测试(wsat:writesaturationtest)。wsat是指持续写入数据直至目标ssd多次写满数据。

参见图5,图5为本申请提供的测试wsat的流程图。当通过运行测试脚本测试目标ssd的wsat时,执行如图5所示的流程。需要说明的是,应用于本实施例4中,这里的测试脚本可为用于测试wsat的脚本。在执行下述图5所示流程之前,还需先对目标ssd执行purge操作。

如图5所示,该流程可包括以下步骤:

步骤501,以大小为第三值的数据块为单位随机对所述目标ssd执行写操作,并且在执行写操作过程中每隔设定时间获取第一目标性能参数,依据获取的第一目标性能参数判断所述目标ssd是否达到稳定状态。

这里,第三值可根据实际情况设置,比如可为4k、或128k等。

另外,在一个例子中,设定时间可根据实际需求设置。以设定时间为30分钟为例,则意味着在执行写操作过程中每隔30分钟获取第一目标性能参数。这里的第一目标性能参数与第三值的大小有关,比如,当第三值小于等于4k,或者小于128k时,第一目标性能参数可为iops,当第三值大于等于128k时,第一目标性能参数可为tp。

本实施例以第三值为4k为例,则上述执行写操作过程中每隔30分钟获取第一目标性能参数可为:在执行写操作过程中每隔30分钟获取当前的iops。

本步骤501中,依据获取的第一目标性能参数判断所述目标ssd是否达到稳定状态类似实施例1中判断所述目标ssd是否达到稳定状态,不再赘述。

步骤502,当判断目标ssd达到稳定状态或者当判断目标ssd未达到稳定状态但当前满足写操作停止条件时停止执行写操作,获取整个写操作过程中第一目标性能参数的变化趋势,以实现wsat的测试。

本实施例中,当判断目标ssd达到稳定状态,则停止执行上述以大小为第三值的数据块为单位随机对所述目标ssd执行写操作。

这里,写操作停止条件可根据实际情况设置,比如写操作持续的时间超出预设时间(以24小时为例),或者截至当前,目标ssd写入了4倍容量的数据等。

至此,完成图5所示流程。

在本实施例4中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

需要说明的是,上述在写操作处理期间是一直连续,获取第一目标性能参数,以及判断目标ssd是否达到稳定状态都是测试脚本自动完成。

以上对实施例4进行了描述。

实施例5:

本实施例5中,与目标ssd处于稳定状态无关的性能参数为主机空闲回收利用机制(hir:hostidlerecovery)。hir是指目标ssd的后台进程比如垃圾收集可以利用主机的空闲时间来提高性能,以由主机在非空闲时间内不断写入数据。

参见图6,图6为本申请提供的测试hir的流程图。当通过运行测试脚本测试目标ssd的hir时,执行如图6所示的流程。

需要说明的是,应用于本实施例5中,上述的测试脚本可为用于测试hir的脚本。在执行下述图6所示流程之前,还需先对目标ssd执行purge操作。

如图6所示,该流程可包括以下步骤:

步骤601,以大小为第三值的数据块为单位随机对所述目标ssd执行写操作,在执行写操作过程中每隔设定时间获取第二目标性能参数,依据获取的第二目标性能参数判断所述目标ssd是否达到稳定状态。

这里的第二目标性能参数与上述第一目标性能参数类似。

步骤602,当判断目标ssd达到稳定状态时停止执行写操作,t0时间之后对ssd执行n1轮性能测试,每轮性能测试包括:以大小为第三值的数据块为单位随机对所述目标ssd执行写操作t1时间并停止执行写操作t2时间,持续循环n2次,然后以大小为第三值的数据块为单位随机对所述目标ssd执行写操作t3时间。

这里的写操作是指读写比例为0/100,/的前面数字“0”表示读的比例,/的后面数字“100”表示写的比例。

在本实施例中,不同轮的性能测试过程中写操作停止的时间不同。以第三值为4k为例举例描述各轮性能测试:

第一轮:以4k为单位随机向目标ssd写入数据(时间是5秒钟)然后停止输入任何数据5秒钟,持续循环360轮;然后以4k为单位随机向目标ssd写入数据块(时间是1800秒);

第二轮性能测试:以4k为单位随机向目标ssd写入数据(时间是5秒钟)然后停止输入任何数据10秒钟,持续循环360轮;然后以4k为单位随机向目标ssd写入数据块(时间是1800秒);

第三轮性能测试:以4k为单位随机向目标ssd写入数据(时间是5秒钟)然后停止输入任何数据15秒钟,持续循环360轮;然后以4k为单位随机向目标ssd写入数据块(时间是1800秒);

第四轮性能测试:以4k为单位随机向目标ssd写入数据(时间是5秒钟)然后停止输入任何数据20秒钟,持续循环360轮;然后以4k为单位随机向目标ssd写入数据块(时间是1800秒);

以此类推。

步骤603,获取每轮性能测试中第二目标性能参数的变化趋势。

本实施例以第三值为4k为例,则第二目标性能参数可为:iops。具体地,步骤603可包括:获取每轮性能测试中iops的变化趋势。

通过图6所示流程能够获取目标ssd在空闲时间的回收效率和局部的性能变化趋势。

至此,完成图6所示流程。

在本实施例5中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

需要说明的是,上述在写操作处理期间是一直连续,获取第二目标性能参数,以及判断目标ssd是否达到稳定状态都是测试脚本自动完成。

以上对实施例5进行了描述。

实施例6:

本实施例6中,与目标ssd处于稳定状态无关的性能参数为大小块交叉写入(csr:crossstimulusrecovery)。csr观察测试目标ssd如何处理从写入大块数据到写入小块数据的转换,并返回到大块数据写入。此测试旨在演示两个近距离工作负载之间的交互,例如虚拟化环境中的不同工作负载需求。

参见图7,图7为本申请提供的测试csr的流程图。当通过运行测试脚本测试目标ssd的csr时,执行如图7所示的流程。

需要说明的是,应用于本实施例6中,上述的测试脚本可为用于测试csr的脚本。在执行下述图7所示流程之前,还需先对目标ssd执行purge操作。

如图7所示,该流程可包括以下步骤:

步骤701,先以大小为第四值的数据块为单位随机对所述目标ssd执行写操作t4时间,然后以大小为第五值的数据块为单位随机对所述目标ssd执行写操作t5时间,接着又以大小为第四值的数据块为单位随机对所述目标ssd执行写操作t4时间。

在一个例子中,第四值、t4可根据实际情况设置,比如第四值为1024k,t3为8小时。在t4时间内每单位时间比如1分钟记录目标ssd的性能参数比如iops、tp等。

在一个例子中,第五值、t5可根据实际情况设置。其中,第五值小于第四值。比如第五值为8k,t5为6小时。在t5时间内每单位时间比如1分钟记录目标ssd的性能参数比如iops、tp等。

这里的写操作是指读写比例为0/100,/的前面数字“0”表示读的比例,/的后面数字“100”表示写的比例。

步骤702,获取整个写操作过程中第三目标性能参数的变化趋势,以实现csr的测试。

以第三目标性能参数为iops为例。具体地,步骤702可包括:获取整个写操作过程中iops的变化趋势。

至此,完成图7所示流程。

在本实施例6中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

以上对实施例6进行了描述。

实施例7:

本实施例7中,与目标ssd处于稳定状态无关的性能参数为企业综合工作量(ecw:enterprisecompositeworkload)。测试ecw的目的是了解i/o工作负载中的响应时间。可以通过模拟一个类似企业的工作量的环境如大小文件块的转换、随机数据的有效载荷及随机的写入等来实现测试ecw。

参见图8,图8为本申请提供的测试ecw的流程图。当通过运行测试脚本测试目标ssd的ecw时,执行如图8所示的流程。

需要说明的是,应用于本实施例7中,上述的测试脚本可为用于测试ecw的脚本。在执行下述图8所示流程之前,还需先对目标ssd执行purge操作,然后按照如步骤202描述的对目标ssd执行写操作以使所述目标ssd被写满数据。之后执行如图8所示的流程:

如图8所示,该流程可包括以下步骤:

步骤801,在满足ecw测试条件下,获取各个线程tc-队列深度qd对下在指定时间内以不同大小的数据块为单位并按照第二指定读写比例对所述目标ssd进行读写操作得到的指定性能参数。

这里的满足ecw测试条件是指:

第一条件:目标ssd达到稳定状态,或者下述的写操作轮数达到预设轮数比如25轮。

在本实施例7中,目标ssd达到稳定状态之前,需要根据目标ssd的逻辑块地址(lba,记为目标lba)区域分组,比如分成如下三组:groupa、groupb、groupc。其中,groupa、groupb、groupc包括目标lba不同,如下表1的动态范围限制(activerangerestriction)所示,groupa包括目标lba的前5%,groupb包括从目标lba的5%至目标lba的20%,groupc包括目标lba剩下的80%。

表1

在表1中,同一时间段内groupa、groupb、groupc占用的时间不同。

如表1所示的时间段比例(%ofaccesswithin1measurementperiod),

在同一时间段,groupa占用50%,groupb占用30%,groupc占用20%。

每一group都配置不同块accessspecification(随机写)发生的概率。表2示出了各个数据块与发生概率之间的对应关系:

表2

按照表1、表2执行至少m轮写操作。其中,每轮写操作可包括:以不同大小的数据块为单位,在指定时间内对所述目标ssd进行写操作。这里执行写操作时可参考表1中各组的逻辑地址占比,以及表2示出的数据块对应的发生概率。在执行完m轮后,m可取值为5,则获取每一轮写操作中的目标数据,在一个例子中,所述目标数据为:以大小为第一值比如4k的数据块为单位在指定时间内写入数据时的平均iops。之后,依据目标数据判断目标ssd是否达到稳定状态。这里,判断目标ssd是否达到稳定状态可参考实施例描述,这里不再赘述。

需要说明的是,在上述判断目标ssd达到稳定状态时,则停止执行写操作,而当判断目标ssd未达到稳定状态时,则继续执行写操作。其中,每执行一轮写操作,则依据最近执行的前m轮写操作中的目标数据判断目标ssd是否达到稳定状态,如果是,停止执行读写操作处理,如果否,则继续执行下一轮读写操作处理,直至达到最大轮次比如25轮。

第二条件:在第一条件满足的前提下,以不同大小的数据块为单位在指定时间内随机对所述目标ssd进行写操作,若写操作持续大于时间t6(比如5分钟),则当写操作持续达到时间t7(比如30分钟)时,或者当目标ssd内已写入数据量占目标ssd最大容量的10%时,停止执行写操作。

这里,第二条件中,默认目标ssd的逻辑地址从0~最大容量;测试软件的线程数32,队列深度32(关于线程数和队列深度,理论上选择较大性能较好,但是超过测试平台能提供的阈值,则会减慢,所以预留了设置口,给与用户自己配置,当然后续如何测试出哪一个线程和队列深度的组合性能最理想,后续可以配置最理想的线程和队列深度的组合)。

以上对ecw测试条件进行了描述。

在步骤801中各个线程tc-队列深度qd对是指tc组中任一tc与qd组中任一qd的组合。举例:

tc组包括:[32,16,8,6,4,2,1],

qd组包括:[32,16,8,6,4,2,1],

则,tc组中其中一个tc与qd组中任一qd的组合组成tc-qd对,比如tc=32、od=32,是一个tc-qd对。

在步骤801中,第二指定读写比例可根据实际情况设置,比如40/60,其中,读操作占比为40%,写操作占比为60%。

步骤802,依据在指定tc-qd对下获取的第四目标性能参数判断目标ssd是否达到稳定状态,如果是,获取满足条件的第五目标性能参数,

以完成ecw的测试。

这里的指定tc-qd对可为tc=32,qd=32。

在一个例子中,上述的第四目标性能参数可为iops。

另外,在本实施例中,获取满足条件的第五目标性能参数可为最小iops、最大iops、介于最小iops与最大iops之间的中间iops等。在一个例子中,最小iops可为tc=1、qd=1时的iops。最大iops需要满足lat<5ms,找到最大iops后,就可以找到对应的最优tc和最优qd(最优tc不一定是32,最优qd不一定是32,通过此步骤就可以得到最优tc和最优qd)。

至此,完成图8所示流程。通过图8所示流程,最终能够在复杂的前置条件下,获取不同tc-qd下的性能对比,并找到此测试环境下的最优的tc-qd配置。

在本实施例7中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

以上对实施例7进行了描述。

实施例8:

本实施例8中,与目标ssd处于稳定状态无关的性能参数为dirth(demandintensity/responsetimehistogram)。dirth是指在不同toto(tc-qd对)下的iops、反应时间及cpu使用率。

参见图9,图9为本申请提供的测试dirth的流程图。当通过运行测试脚本测试目标ssd的dirth时,执行如图9所示的流程。

需要说明的是,应用于本实施例8中,上述的测试脚本可为用于测试dirth的脚本。在执行下述图8所示流程之前,还需先对目标ssd执行purge操作。

步骤901与步骤201类似。

步骤902与步骤202类似。

步骤903,满足dirth测试条件下,获取各个toto下在指定时间内以大小为第六值的数据块为单位并按照第三读写比例对所述目标ssd进行读写操作时的dirth。

这里,满足dirth测试条件是指:先在tc=32、qd=32下以第六值(8k)的数据块为单位并按照第三读写比例(65/35)对所述目标ssd进行读写操作。若读写操作持续大于时间t6(比如5分钟),则当写操作持续达到时间t7(比如30分钟)时,或者当目标ssd内已写入数据量占目标ssd最大容量的10%时,停止执行读写操作。此时需记录每次读写操作时的dirth。

步骤903中各个toto是指tc组中任一tc与qd组中任一qd的组合。举例:

tc组包括:[32,16,8,6,4,2,1],

qd组包括:[32,16,8,6,4,2,1],

则,tc组中其中一个tc与qd组中任一qd的组合组成tc-qd对(toto),比如tc=32、od=32,是一个tc-qd对(toto)。

需要说明的是,步骤903可重复多次,直到稳定或重复次数达到设定次数。

在本步骤903中,还可通过找到最大iops来找到对应的最优tc和最优qd(最优tc不一定是32,最优qd不一定是32,通过此步骤就可以得到最优tc和最优qd)。

至此,完成图9所示流程。

在本实施例8中,执行每一操作都有log记录逻辑节点和时间点,以便于后续定位和分析。

以上对实施例8进行了描述。

以上通过8个实施例列举了比较有代表性的8个性能测试,根据不同的测试需要,还可实现其他性能测试。

还需要说明的是,上述实施例4至实施例8是在目标ssd达到稳定状态以后,紧接着改变一些设置条件继续测试,最终获取它们对目标ssd的影响和目标ssd对应的性能的好坏。

在本申请中,还可对测试进行实时检查,从而调整测试时间或者测试模式,以此节约时间并得到一个最接近理论的结果。比如,可依据测试过程中生成的日志log检查测试是否正常,所述log包括运行正常normal的日志、出现错误的日志。和/或,检查测试结果(csv文件)是否正常(自动化脚本会在测试运行前检查指定目录下是否有log和csv存在,若有的话会自动删除;在需要时才会自动生成)等等。

在本申请中,将测试结果(csv文件)存储至指定存储位置,并利用已编译的结果处理脚本(比如打开已编译的excel的xlsm文件,直接点击开始按钮(窗体控件))生成用于表征测试结果的测试结果标识,将所述测试结果标识整合至测试报告模板,以根据所述测试结果标识进行分析和总结。所述测试结果标识通过表格和/或图形标识。这里,若是检查到缺失csv文件或者csv文件里面的数据为空等异常情况,可弹出对话框并跳出操作)。

以上对本申请提供的方法进行了描述。

下面对本申请提供的装置进行描述:

参见图10,图10为本申请提供的装置结构图。如图10所示,该装置包括:

机器可读存储介质,用于存储机器可读指令;

处理器,用于读取所述机器可读指令,并执行所述指令以实现上述实施例1至实施例8所述的ssd性能测试方法。

在本申请中,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

至此,完成图10所示的装置结构描述。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1