對機械硬碟和SSD固態硬碟IOPS、吞吐量的壓測對比

czxin788發表於2018-08-14

    最近,我利用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、吞吐量的壓測對比


結論:

    透過上面兩張圖可以看出,在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章