简介
硬盘作为电脑的一个主要部件,不仅肩负着记录一切数据信息的重要职责,而且它的性能对整个系统的性能有直接影响。由于磁存储介质的发展较一日千里的半导体技术落后,所以硬盘在整机系统中很多时候充当着一个 瓶颈 的角色。如果把一台整机比喻成一只水桶的话,硬盘就好比水桶中最低一侧的桶壁,水桶是否可以装更多的水就由这一侧桶壁的高度决定。由此,我们可见硬盘对整机系统性能的影响有多大。
既然明白了硬盘性能在整机系统中担当的重要角色,了解如何测试硬盘的性能相信是不少电脑用户所关心的问题。在测试硬盘之前,我们首先要了解一下影响硬盘性能的有关参数,只有这样我们才能在测试中做到有的放矢,更好地分析和利用测试结果,这也有助于我们提高在计算机上所允许的应用的性能。
磁盘性能测试所要关注的参数主要有以下几个:
Sysbench介绍
sysbench:是一款开源的多线程性能测试工具,可以执行 CPU/内存/线程/IO/数据库等方面的性能测试。本文将指导各位如何安装和配置性能测试工具sysbench来进行磁盘性能测试。
Sysbench安装
编译安装
1、 从git下载软件到本地
git clone https://github.com/akopytov/sysbench.git
2、编译安装sysbench
cd sysbench/ ./autogen.sh ./configure --without-mysql make && make install
注意:若不添加额外参数 –without-mysql ,则会提示需要安装 mysql 相关库。
Yum安装
yum -y install sysbench
使用sysbench对磁盘进行性能测试
1、 准备IO测试文件:执行如下命令,生成16个文件,用于本次测试。
sysbench --test=fileio --file-num=16 --file-total-size=2G prepare
参数含义:
–test=fileio 测试的名称叫做 fileio
–file-num=16 文件的数量是 16 个
–file-total-size=2G 文件的总体大小是 2GB
说明:每个测试文件的大小是 130MB,总计花费 32 秒。
查看测试文件:
$ ll 总用量 2097156 drwxr-xr-x 13 root root 4096 8月 24 15:50 sysbench -rw------- 1 root root 134217728 8月 24 15:57 test_file.0 -rw------- 1 root root 134217728 8月 24 15:57 test_file.1 -rw------- 1 root root 134217728 8月 24 15:58 test_file.10 -rw------- 1 root root 134217728 8月 24 15:58 test_file.11 -rw------- 1 root root 134217728 8月 24 15:58 test_file.12 -rw------- 1 root root 134217728 8月 24 15:58 test_file.13 -rw------- 1 root root 134217728 8月 24 15:58 test_file.14 -rw------- 1 root root 134217728 8月 24 15:58 test_file.15 -rw------- 1 root root 134217728 8月 24 15:57 test_file.2 -rw------- 1 root root 134217728 8月 24 15:57 test_file.3 -rw------- 1 root root 134217728 8月 24 15:57 test_file.4 -rw------- 1 root root 134217728 8月 24 15:57 test_file.5 -rw------- 1 root root 134217728 8月 24 15:57 test_file.6 -rw------- 1 root root 134217728 8月 24 15:58 test_file.7 -rw------- 1 root root 134217728 8月 24 15:58 test_file.8 -rw------- 1 root root 134217728 8月 24 15:58 test_file.9
2、测试多线程下小IO的随机只读性能
$ sysbench --test=fileio --file-num=16 --file-total-size=2G --file-test-mode=rndrd --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options. sysbench 1.0.6 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 1 Initializing random number generator from current time Extra file open flags: 3 16 files, 128MiB each 2GiB total file size Block size 16KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random read test Initializing worker threads... Threads started! File operations: reads/s: 1487.34 writes/s: 0.00 fsyncs/s: 0.00 Throughput: read, MiB/s: 23.24 written, MiB/s: 0.00 General statistics: total time: 10.0002s total number of events: 14877 Latency (ms): min: 0.15 avg: 0.67 max: 168.34 95th percentile: 0.84 sum: 9978.66 Threads fairness: events (avg/stddev): 14877.0000/0.00 execution time (avg/stddev): 9.9787/0.00
参数含义:
–test=fileio 测试的名称叫做 fileio
–file-num=16 文件的数量是 16 个
–file-total-size=2G 文件的总体大小是 2GB
–file-test-mode=rndrd 测试模式是随机读取
–file-extra-flags=direct 使用额外的标志来打开文件{sync,dsync,direct}
–file-fsync-freq=0 执行 fsync() 的频率
–file-block-size=16384 测试时文件块的大小位 16384 (16K)
测试结果:
随机读取的数据吞吐量:23.24 MB/s
随机读的IOPS: 1487.34
平均延迟:0.67毫秒
3、测试多线程下小IO的随机写入性能
$ sysbench --test=fileio --file-num=16 --file-total-size=2G --file-test-mode=rndwr --max-time=180 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options. WARNING: --max-time is deprecated, use --time instead sysbench 1.0.6 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 1 Initializing random number generator from current time Extra file open flags: 3 16 files, 128MiB each 2GiB total file size Block size 16KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random write test Initializing worker threads... Threads started! File operations: reads/s: 0.00 writes/s: 1536.37 fsyncs/s: 0.00 Throughput: read, MiB/s: 0.00 written, MiB/s: 24.01 General statistics: total time: 180.0041s total number of events: 276556 Latency (ms): min: 0.22 avg: 0.65 max: 279.43 95th percentile: 1.01 sum: 179649.14 Threads fairness: events (avg/stddev): 276556.0000/0.00 execution time (avg/stddev): 179.6491/0.00
参数含义:
–file-test-mode=rndwr 测试模式是随机写
测试结果:
随机写入的数据吞吐量:24.01 MB/s
随机写的IOPS: 1536.37
平均延迟:0.65毫秒
4、测试多线程下小IO的随机读写性能
$ sysbench --test=fileio --file-num=16 --file-total-size=2G --file-test-mode=rndrw --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options. sysbench 1.0.6 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 1 Initializing random number generator from current time Extra file open flags: 3 16 files, 128MiB each 2GiB total file size Block size 16KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Initializing worker threads... Threads started! File operations: reads/s: 1516.94 writes/s: 1011.33 fsyncs/s: 0.00 Throughput: read, MiB/s: 23.70 written, MiB/s: 15.80 General statistics: total time: 10.0073s total number of events: 25307 Latency (ms): min: 0.12 avg: 0.39 max: 66.01 95th percentile: 0.77 sum: 9981.29 Threads fairness: events (avg/stddev): 25307.0000/0.00 execution time (avg/stddev): 9.9813/0.00
参数含义:
–file-test-mode=rndrw 测试模式是随机读写
随机读取的数据吞吐量:23.70 MB/s
随机写入的数据吞吐量:15.80 MB/s
随机读IOPS:1516.94
随机写IOPS:1011.33
平均延迟:0.39毫秒
至此,完成本次对磁盘的全部性能测试。
附录:
Sysbench 的文件测试模式,seqwr 顺序写,seqrew r顺序读写,seqrd 顺序读,rndrd 随机读,rndwr 随机写,rndrw 随机读写。
–file-rw-ratio=4 读写比例调整,为4表示读写比例4:1