测试过程
正如前面提到的,我们先在干净的磁盘上执行基准测试,然后执行I/O密集型压力测试,最后再次执行基准测试,并将前后两次基准测试的结果进行对比,基准测试的设置已经讨论过了,但“折磨”(压力)测试还需要进一步说明。
I/O密集型测试的目的是为了考验底层存储介质的性能,顺带也测试了文件系统的性能,注意我们要测试的是一块英特尔SSD,从测试结果看各种提高性能的技术究竟对性能有何影响,因此I/O密集型测试也要针对各种文件大小和记录大小进行测试,我们选择的测试工具是IOR,它是一款基于MPI的I/O基准测试工具,支持N-N(N个客户端读/写N个文件)和N-1(N个客户端读/写单个文件)性能测试。根据测试的类型,IOR有很多选项,但最基本的是方法是将文件分解成多个段,段再按顺序分解成块,块上的数据以“t”为单位进行传输(t表示传输大小),下图显示了一个文件是如何用这些参数构造的。
图 1 IOR文件布局
为简单起见,段大小和块大小设为一样,即一个段只包含一个块。
我们运行了两个IOR命令,每个重复执行10次,第一个IOR命令如下:
mpirun -np 4 -machinefile ./machinefile ./IOR -a POSIX -b 64k -F -i 10 -s 200000 -t 4k
其中“mpirun -np 4 -machinefile ./machinefile”全部是MPI命令选项。
l -np 4:表示进程数为4。
l -machinefile ./machinefile:指定主机名列表的位置,由于我们是在单机上测试,因此只列出了本系统的主机名,每个测试对应一条,因此总共有4条记录。
l ./IOR:可执行文件的名称。
IOR的真正运行参数是放在可执行文件IOR之后的,参数解释如下:
l -a POSIX:告诉IOR使用POSIX API(不是MPI-IO或其它API)。
l -b 64k:块大小,这里是64KB。
l -F:告诉IOR每个进程使用一个文件。
l -i 10:告诉IOR运行10次测试。
l -s 200000:告诉IOR段的数量,这里是200000。
l -t 4k:告诉IOR传输大小,这里是4KB。
l -vv:告诉IOR输出详细信息。
IOR将会使用前面的参数执行读和写测试,你可以根据块大小计算出文件的大小,每个段的块数,以及段的数量,下面我们略去了IOR的输出内容。但是从输出结果可以看出文件的总大小是48.83GB,需要注意的是,文件大小必须控制在64GB以内,因为磁盘格式化后的总大小才58.7GB,在前面的部分测试中,IOR在测试系统上运行时用时7分钟。
第二个IOR命令和第一个类似,但块大小,传输大小和段数量不同,命令如下:
mpirun -np 4 -machinefile ./machinefile ./IOR -a POSIX -b 1M -F -i 10 -s 14000 -t 256k
下面我们同样略去了大部分代码,只展示部分输出结果如下:
Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
--------- --------- --------- ---------- ------- --------- --------- ---------- ------- -------
write 197.95 197.68 197.79 0.09 0.06 0.06 0.06 0.00 283.12821 4 4 10 1 0 1 0 0 14000 1048576 262144 58720256000 -1 POSIX EXCEL
read 242.10 241.06 241.56 0.31 0.07 0.07 0.07 0.00 231.82731 4 4 10 1 0 1 0 0 14000 1048576 262144 58720256000 -1 POSIX EXCEL
Max Write: 197.95 MiB/sec (207.56 MB/sec)
Max Read: 242.10 MiB/sec (253.86 MB/sec)
Run finished: Tue Sep 28 11:57:59 2010
这次IOR测试使用更大的文件(54.69GB),测试耗时近90分钟。
和I/O密集型测试一样,这两个IOR命令各运行了10次,但文件大小更大,给磁盘带来的压力也更大。