阿里雲主機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優化實例 20GB

數據盤: SSD 300GB

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的寫入

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#

 

--此致--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM