测试用具:sysbench
网站地址:http://sysbench.sourceforge.net/
在我看来,sysbench是一个方便的存储性能测试工具,
可以快速的对比各种不同的设备在不同的并发和参数情况下的性能表现。
测试用例:
总计160G的文件,进行随机读取。
分别使用10,20,30,40,50,60,100个线程并发测试。
使用了O_DIRECT模式避免文件系统的缓存影响测试结果。
sysbench的参数都很清晰,我比较喜欢–file-extra-flags=direct这个参数,这个参数比较类似InnoDB中的O_DIRECT模式。
测试前首先需要准备测试文件:
sysbench –max-requests=500000 –test=fileio –num-threads=N –file-total-size=160G –file-test-mode=rndrd –file-extra-flags=direct prepare
然后进行测试:
sysbench –max-requests=500000 –test=fileio –num-threads=N –file-total-size=160G –file-test-mode=rndrd –file-extra-flags=direct run
以下是我在公司的HP的SAN存储上进行测试的结果:
当并发线程取到40时,得到最优的IOPS结果和可以接受的延迟时间,随着线程数量的增加,每次IO的响应时间明显变长。
并发线程为40的测试结果如下,主要可以参考红色标记的部分:
#sysbench –max-requests=500000 –test=fileio –num-threads=40 –file-total-size=160G –file-test-mode=rndrd –file-extra-flags=direct run
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 40
Extra file open flags: 16384
128 files, 1.25Gb each
160Gb total file size
Block size 16Kb
Number of random requests for random IO: 500000
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random read test
Threads started!
Done.
Operations performed: 500001 Read, 0 Write, 0 Other = 500001 Total
Read 7.6294Gb Written 0b Total transferred 7.6294Gb (114.69Mb/sec)
7340.44 Requests/sec executed
Test execution summary:
total time: 68.1159s
total number of events: 500001
total time taken by event execution: 2723.8192
per-request statistics:
min: 0.11ms
avg: 5.45ms
max: 332.81ms
approx. 95 percentile: 9.23ms
Threads fairness:
events (avg/stddev): 12500.0250/57.27
execution time (avg/stddev): 68.0955/0.00
从以上测试结果来看,这个HP存储设备的IOPS大概在7300左右,平均响应时间在5ms左右。
对比测试了一台机器上挂载的本地磁盘,IOPS大概在1000左右,平均延迟在10ms以上。
综合看来,SAN存储确实要比本地磁盘表现高几个数量级。