对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比

    最近,我利用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文件)的结果

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第1张图片

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第2张图片


结论:

    通过上面两张图可以看出,在2G磁盘文件下,4k数据块的iops最高,可以达到2.8万;16k数据块的吞吐量最高,可以达到140Mb/s

6.2 机械硬盘(8G文件)的结果

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第3张图片

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第4张图片

结论:

    通过上面两张图可以看出,在8G磁盘文件下,4k数据块的iops最高,可以达到2.8万;16k数据块的吞吐量最高,可以达到110Mb/s。

6.3 SSD固态硬盘(2G文件)的结果

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第5张图片

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第6张图片

结论:

    在SSD固态硬盘上创建2G的文件时,4k数据块的iops最高,可以达到2.8万;16k数据块测得的吞吐量最高,为140Mb/s。

6.4 SSD固态硬盘(8G文件)的结果

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第7张图片

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第8张图片

结论:

    在SSD固态硬盘上创建8G的文件时,4k数据块的iops最高,可以达到2.8万;16k数据块测得的吞吐量最高,为140Mb/s。


6.5 SSD固态硬盘和机械硬盘的iops、吞吐量对比

上面我们看到,数据块越小,iops越高,吞吐量却较小。

我本次测试磁盘性能是为了给MySQL数据库用的,所以下面我们着重对比一下,SSD固态硬盘和机械硬盘在8G文件、16k数据块时的差异。

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第9张图片

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第10张图片


结论:

        在8G磁盘上,数据块为16k的情况下,机械硬盘和SSD固态硬盘的顺序读写能力相当,但是SSD固态硬盘的随机读写性能显然比机械硬盘更好一些。

       所以,如果我们把现在mysql硬盘由机械的换成SSD的,性能大概会提升一倍。


下面我们再对比一下机械硬盘和SSD固态硬盘的吞吐量:

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第11张图片

对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比_第12张图片

结论:

        同样,从吞吐量来看,得到的结论和iops的相同,即在8G磁盘上,数据块为16k的情况下,机械硬盘和SSD固态硬盘的顺序读写能力相当,但是SSD固态硬盘的随机读写性能显然比机械硬盘更好一些。

       所以,如果我们把现在mysql硬盘由机械的换成SSD的,性能大概会提升一倍。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-2200027/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28916011/viewspace-2200027/

你可能感兴趣的:(对机械硬盘和SSD固态硬盘IOPS、吞吐量的压测对比)