阿里雲主機SSD實例磁盤測試及IO調度算法調整

測試背景及環境說明

阿里雲ECS算法

主機配置:數據庫

  4C8G網絡

root@zabbix-master:~# grep -i "model name" /proc/cpuinfo
model name    : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
model name    : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
model name    : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
model name    : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
root@zabbix-master:~#
root@zabbix-master:~# free -m
             total       used       free     shared    buffers     cached
Mem:          8008       7863        144          0        209       6666
-/+ buffers/cache:        987       7020
Swap:            0          0          0
root@zabbix-master:~# 

系統盤: SSD優化實例 20GBasync

數據盤: SSD 300GBoop

root@zabbix-master:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
vda    254:0    0    20G  0 disk
├─vda1 254:1    0    20G  0 part /
└─vda2 254:2    0     1M  0 part
vdb    254:16   0   300G  0 disk /data
sr0     11:0    1  1024M  0 rom  
root@zabbix-master:~#

操做系統:Debian 8.2性能

root@zabbix-master:~# cat /etc/debian_version
8.2
root@zabbix-master:~#

測試目的

測試阿里雲SSD的IO性能(主要是寫入),並選取合適的IO調度算法測試

測試步驟

查看系統支持的IO調度算法

root@zabbix-master:~# dmesg |grep -i scheduler
[    0.489195] io scheduler noop registered
[    0.489196] io scheduler deadline registered
[    0.489447] io scheduler cfq registered (default)
root@zabbix-master:~#

測試系統盤vda

查看vda使用IO調度算法,是cfq優化

root@zabbix-master:/tmp# cat  /sys/block/vda/queue/scheduler
noop deadline [cfq]
root@zabbix-master:/tmp#

測試cfq下vda的寫入ui

root@zabbix-master:/tmp# dd bs=1M count=1024 if=/dev/zero of=/tmp/test.w conv=fdatasync
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已複製,17.1651 秒,62.6 MB/秒
root@zabbix-master:/tmp#
root@zabbix-master:/tmp# du -sh test.w
1.1G    test.w
root@zabbix-master:/tmp#

將調整爲noop進行測試阿里雲

root@zabbix-master:/tmp# echo noop > /sys/block/vda/queue/scheduler
root@zabbix-master:/tmp# cat /sys/block/vda/queue/scheduler
[noop] deadline cfq
root@zabbix-master:/tmp#
root@zabbix-master:/tmp# rm -f test.w
root@zabbix-master:/tmp#
root@zabbix-master:/tmp# dd bs=1M count=1024 if=/dev/zero of=/tmp/test.w conv=fdatasync
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已複製,17.5197 秒,61.3 MB/秒
root@zabbix-master:/tmp#

測試數據盤vdb

查看vdb使用IO調度算法,是cfq

root@zabbix-master:/data/dd_test# cat  /sys/block/vdb/queue/scheduler
noop deadline [cfq]
root@zabbix-master:/data/dd_test#

測試cfq下vdb的寫入

root@zabbix-master:/data/dd_test# dd bs=1M count=1024 if=/dev/zero of=/data/dd_test/test.w conv=fdatasync
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已複製,5.5823 秒,192 MB/秒
root@zabbix-master:/data/dd_test#
root@zabbix-master:/data/dd_test# du -sh  test.w
1.1G    test.w
root@zabbix-master:/data/dd_test#

調整爲noop進行測試

root@zabbix-master:/data/dd_test# echo noop > /sys/block/vdb/queue/scheduler
root@zabbix-master:/data/dd_test# cat  /sys/block/vdb/queue/scheduler
[noop] deadline cfq
root@zabbix-master:/data/dd_test#
root@zabbix-master:/data/dd_test# rm  -f test.w
root@zabbix-master:/data/dd_test#
root@zabbix-master:/data/dd_test# dd bs=1M count=1024 if=/dev/zero of=/data/dd_test/test.w conv=fdatasync
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已複製,5.73825 秒,187 MB/秒
root@zabbix-master:/data/dd_test#

調整爲deadline進行測試

root@zabbix-master:/data/dd_test# echo deadline > /sys/block/vdb/queue/scheduler
root@zabbix-master:/data/dd_test# cat /sys/block/vdb/queue/scheduler
noop [deadline] cfq
root@zabbix-master:/tmp#
root@zabbix-master:/data/dd_test# du -sh  test.w
1.1G    test.w
root@zabbix-master:/data/dd_test#
root@zabbix-master:/data/dd_test# rm  -f test.w
root@zabbix-master:/data/dd_test#
root@zabbix-master:/data/dd_test# dd bs=1M count=1024 if=/dev/zero of=/data/dd_test/test.w conv=fdatasync
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已複製,5.63042 秒,191 MB/秒
root@zabbix-master:/data/dd_test#

順便測試跨盤(vda-->vdb)讀寫

root@zabbix-master:/data/dd_test# dd if=/dev/vda1 of=/data/dd_test/test.w bs=1M count=1024 conv=fdatasync
記錄了1024+0 的讀入
記錄了1024+0 的寫出
1073741824字節(1.1 GB)已複製,18.1907 秒,59.0 MB/秒
root@zabbix-master:/data/dd_test#

測試結果

①:雖然阿里雲的系統盤聲稱也是SSD,可是系統盤的讀寫速度明顯不及數據盤.
②:系統盤和數據盤的寫入速度(1M)在noop下和cfq還有deadline下沒有明顯的差別

疑問

跨盤讀寫測試中的瓶頸的出如今哪裏?
    vda讀?
    vdb寫?
    網絡?
PS:或許這個疑問的解答須要詳細的準備測試計劃進行測試,同時測試1K,4K,8K,1M等數據大小;並分別測試讀,寫,雙向跨盤讀寫.

最終IO調度算法的選擇

    系統盤: 仍然是cfq
    數據盤: 選用deadline

參考調優準則:

  Deadline對數據庫環境(ORACLE RAC,MYSQL等)是最好的選擇,因爲數據盤主要是做爲MySQL數據庫的數據目錄來使用,聽從此準則進行調整.

緣由:

  Deadline確保了在一個截止時間內服務請求,這個截止時間是可調整的,而默認讀期限短於寫期限.這樣就防止了寫操做由於不能被讀取而餓死的現象.
 

將IO調度算法的配置持久化寫入

我沒有使用修改grub的方式,而是將調整調度算法的操做寫到rc.local中       
root@zabbix-master:/data/dd_test# grep scheduler /etc/rc.local
echo deadline > /sys/block/vdb/queue/scheduler
root@zabbix-master:/data/dd_test#

 

--此致--

相關文章
相關標籤/搜索