最近,我利用sysbench对我们的机械硬盘和固态硬盘的iops、吞吐量进行了压测对比。
一、 环境
分别对SSD固态硬盘和机械硬盘进行压测;
分别在2G文件和8G文件上的进行压测;
分别对4k和16k两种数据块进行压测;
分别对seqrd(顺序读)、seqwr(顺序写)、rndrd(随机读)、rndwr(随机写)和rndrw(随机读写)5种模式进行压测。
二、sysbench的安装
1、下载sysbench-0.5.tar.gz
2、解压并安装
tar xzvf sysbench-0.5.tar.gz cd sysbench-0.5 chmod +x autogen.sh ./autogen.sh ./configure make make install
三、创建虚拟机
分别在固态硬盘和机械硬盘上创建相同配置的虚拟机,cpu和内存要相同。
四、用脚本压测
磁盘io自动测试脚本sysbench.sh:
#!/bin/sh set -u #当执行时使用到未定义过的变量,则显示错误信息。 set -x #执行指令后,会先显示该指令及所下的参数。 set -e #若指令传回值不等于0,则立即退出shell。 for size in 2G 8G;do for mode in seqrd seqwr rndrd rndwr rndrw;do for blksize in 4096 16384;do sysbench --test=fileio --file-num=64 --file-total-size=$size prepare for threads in 1 4 8 16 32;do echo "====== testing $blksize in $threads threads" echo PARAMS $size $mode $threads $blksize > sysbench-size-$size-mode-$mode-threads-$threads-blksz-$blksize for i in 1 2 3;do sysbench --test=fileio --file-total-size=$size --file-test-mode=$mode --max-time=180 --max-requests=100000000\ --num-threads=$threads --init-rng=on --file-num=64 --file-extra-flags=direct --file-fsync-freq=0\ --file-block-size=$blksize run | tee -a sysbench-size-$size-mode-$mode-threads-$threads-blksz-$blksize 2>&1 done done sysbench --test=fileio --file-total-size=$size cleanup done done done
五、收集数据
当在SSD固态硬盘和机械硬盘上运行完sysbench.sh后,用如下脚本在生成的sysbench报告里面分别收集iops和吞吐量的数据。
运行iops.sh:
#!/bin/bash for line in `ls` do value=`cat $line |grep 'Requests/sec executed' | awk '{print $1}' |xargs` echo $line ' ' $value done
iops结果如下:
sysbench-size-8G-mode-rndrd-threads-16-blksz-16384 6387.80 6335.13 6431.04 sysbench-size-8G-mode-rndrd-threads-1-blksz-16384 473.58 877.77 1196.82 sysbench-size-8G-mode-rndrd-threads-32-blksz-16384 7135.20 7126.51 7128.65 sysbench-size-8G-mode-rndrd-threads-4-blksz-16384 2954.01 4317.96 2480.89 sysbench-size-8G-mode-rndrd-threads-8-blksz-16384 5105.38 4224.27 4325.41 sysbench-size-8G-mode-rndrw-threads-16-blksz-16384 3466.77 3474.89 3451.00 sysbench-size-8G-mode-rndrw-threads-1-blksz-16384 689.41 1180.35 1520.89 sysbench-size-8G-mode-rndrw-threads-32-blksz-16384 3697.38 3697.99 3752.44 sysbench-size-8G-mode-rndrw-threads-4-blksz-16384 3053.36 2063.43 2297.72
运行throughput.sh
#!/bin/bash for line in `ls` do value=`cat $line |grep Mb/sec | awk '{print $8}' ` echo $line $value done
throughput的结果如下:
sysbench-size-8G-mode-rndrd-threads-16-blksz-16384 (99.809Mb/sec) (98.986Mb/sec) (100.48Mb/sec) sysbench-size-8G-mode-rndrd-threads-1-blksz-16384 (7.3997Mb/sec) (13.715Mb/sec) (18.7Mb/sec) sysbench-size-8G-mode-rndrd-threads-32-blksz-16384 (111.49Mb/sec) (111.35Mb/sec) (111.39Mb/sec) sysbench-size-8G-mode-rndrd-threads-4-blksz-16384 (46.156Mb/sec) (67.468Mb/sec) (38.764Mb/sec) sysbench-size-8G-mode-rndrd-threads-8-blksz-16384 (79.772Mb/sec) (66.004Mb/sec) (67.585Mb/sec) sysbench-size-8G-mode-rndrw-threads-16-blksz-16384 (54.168Mb/sec) (54.295Mb/sec) (53.922Mb/sec) sysbench-size-8G-mode-rndrw-threads-1-blksz-16384 (10.772Mb/sec) (18.443Mb/sec) (23.764Mb/sec) sysbench-size-8G-mode-rndrw-threads-32-blksz-16384 (57.772Mb/sec) (57.781Mb/sec) (58.632Mb/sec)
可以看到,脚本自动对每组数据测试了三次。
我们把这些数据放在excel里面,然后对每组数据取平均值,并用excel作图。
六、结果分析
6.1 机械硬盘(2G文件)的结果
结论:
通过上面两张图可以看出,在2G磁盘文件下,4k数据块的iops最高,可以达到2.8万;16k数据块的吞吐量最高,可以达到140Mb/s
6.2 机械硬盘(8G文件)的结果
结论:
通过上面两张图可以看出,在8G磁盘文件下,4k数据块的iops最高,可以达到2.8万;16k数据块的吞吐量最高,可以达到110Mb/s。
6.3 SSD固态硬盘(2G文件)的结果
结论:
在SSD固态硬盘上创建2G的文件时,4k数据块的iops最高,可以达到2.8万;16k数据块测得的吞吐量最高,为140Mb/s。
6.4 SSD固态硬盘(8G文件)的结果
结论:
在SSD固态硬盘上创建8G的文件时,4k数据块的iops最高,可以达到2.8万;16k数据块测得的吞吐量最高,为140Mb/s。
6.5 SSD固态硬盘和机械硬盘的iops、吞吐量对比
上面我们看到,数据块越小,iops越高,吞吐量却较小。
我本次测试磁盘性能是为了给MySQL数据库用的,所以下面我们着重对比一下,SSD固态硬盘和机械硬盘在8G文件、16k数据块时的差异。
结论:
在8G磁盘上,数据块为16k的情况下,机械硬盘和SSD固态硬盘的顺序读写能力相当,但是SSD固态硬盘的随机读写性能显然比机械硬盘更好一些。
所以,如果我们把现在mysql硬盘由机械的换成SSD的,性能大概会提升一倍。
下面我们再对比一下机械硬盘和SSD固态硬盘的吞吐量:
结论:
同样,从吞吐量来看,得到的结论和iops的相同,即在8G磁盘上,数据块为16k的情况下,机械硬盘和SSD固态硬盘的顺序读写能力相当,但是SSD固态硬盘的随机读写性能显然比机械硬盘更好一些。
所以,如果我们把现在mysql硬盘由机械的换成SSD的,性能大概会提升一倍。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-2200027/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28916011/viewspace-2200027/