建站服務(wù)器
這篇文章主要介紹壓測ESSD云盤性能的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),三河企業(yè)網(wǎng)站建設(shè),三河品牌網(wǎng)站建設(shè),網(wǎng)站定制,三河網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,三河網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。如何壓測 ESSD 云盤的性能
ESSD 云盤,又稱增強型(Enhanced) SSD 云盤,是阿里云全新推出的超高性能的云盤產(chǎn)品。由于壓測云盤的性能時,云盤本身以及壓測條件都起著重要的作用,因此本文提供了如何配置合適的條件壓測 ESSD 云盤性能的示例,并測試出 100 萬 IOPS。
警告:
測試裸盤可以獲得真實的塊存儲盤性能,但直接測試裸盤會破壞文件系統(tǒng)結(jié)構(gòu),請在測試前提前做好數(shù)據(jù)備,例如,創(chuàng)建磁盤快照。建議您只在新購無數(shù)據(jù)的 ECS 實例上使用工具測試塊存儲性能,避免造成數(shù)據(jù)丟失。
準備工作
為了充分發(fā)揮出多核多并發(fā)的系統(tǒng)性能,壓測出 100 萬 IOPS 性能指標,您可以參閱以下建議測試 ESSD 云盤的性能。
鏡像推薦
您可以使用阿里云官方 鏡像 中高版本的 Linux 鏡像版本。例如,CentOS 7.4/7.3/7.2 64 位和 AliyunLinux 17.1 64 位操作系統(tǒng)。由于對應(yīng)的驅(qū)動還不夠完善,不推薦使用其他低版本的 Linux 鏡像和 Windows 鏡像。
工具推薦
您可以使用 FIO 作為云盤性能標準的測試工具。
實例規(guī)格推薦
目前只有存儲增強型 g5se 實例規(guī)格族支持掛載 ESSD 云盤,您需要 申請 加入使用存儲增強型 g5se 實例規(guī)格族白名單。申請審核完成后,您便可以同時選購存儲增強型 g5se 實例規(guī)格族和 ESSD 云盤。
操作示例
以實例規(guī)格 ecs.g5se.18xlarge 為例,同時 ESSD 云盤的設(shè)備名為 /dev/vdb,示范通過隨機寫(randwrite)測試 ESSD 云盤的性能。
遠程連接 并登錄到 Linux 實例。
運行以下命令安裝 libaio 和 FIO。
sudo yum install libaio –y sudo yum install libaio-devel –y sudo yum install fio -y
運行 cd /tmp 切換路徑。
運行 vim test100w.sh 新建腳本文件,并粘貼以下內(nèi)容,腳本為隨機寫 randwrite IOPS 性能測試示例。
function RunFio { numjobs=$1 # 實例中的測試線程數(shù),如示例中的 8 iodepth=$2 # 同時發(fā)出I/O數(shù)的上限,如示例中的 64 bs=$3 # 單次I/O的塊文件大小,如示例中的 4K rw=$4 # 測試時的讀寫策略,如示例中的 randwrite filename=$5 # 指定測試文件的名稱,如示例中的 /dev/vdb nr_cpus=`cat /proc/cpuinfo |grep "processor" |wc -l` if [ $nr_cpus -lt $numjobs ];then echo "Numjobs is more than cpu cores, exit!" exit -1 fi let nu=$numjobs+1 cpulist="" for ((i=1;i<10;i++)) do list=`cat /sys/block/vdb/mq/*/cpu_list | awk '{if(i<=NF) print $i;}' i="$i" | tr -d ',' | tr '\\n' ','` if [ -z $list ];then break fi cpulist=${cpulist}${list} done spincpu=`echo $cpulist | cut -d ',' -f 2-${nu}` echo $spincpu fio --ioengine=libaio --runtime=30s --numjobs=${numjobs} --iodepth=${iodepth} --bs=${bs} --rw=${rw} --filename=${filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split } echo 2 > /sys/block/vdb/queue/rq_affinity sleep 5 RunFio 8 64 '4k' 'randwrite' '/dev/vdb'
注意:
因測試環(huán)境而異,腳本中您需要修改的命令行有:
命令行 list=cat /sys/block/vdb/mq/*/cpu_list | awk '{if(i<=NF) print $i;}' i="$i" | tr -d ',' | tr '\\n' ',' 中的 vdb。
命令行 RunFio 8 64 '4k' 'randwrite' '/dev/vdb' 中的 8、64、4k、randwrite 和 /dev/vdb。
直接測試裸盤會破壞文件系統(tǒng)結(jié)構(gòu),如果云盤上的數(shù)據(jù)丟失不影響業(yè)務(wù),可以設(shè)置 filename=[設(shè)備名,如本示例中的/dev/vdb]。否則,請設(shè)置為 filename=[具體的文件路徑,比如/mnt/test.image]。
運行 sh test100w.sh 開始測試 ESSD 云盤性能。
腳本解讀
塊設(shè)備參數(shù)
測試實例時,腳本 test100w.sh 中的命令echo 2 > /sys/block/vdb/queue/rq_affinity 是將 ECS 實例中的塊設(shè)備中的參數(shù) rq_affinity 值修改為 2:
參數(shù) rq_affinity 的值為 1 時,表示塊設(shè)備收到 I/O 完成(I/O Completion)的事件時,這個 I/O 被發(fā)送回處理這個 I/O 下發(fā)流程的 vCPU 所在 Group 上處理。在多線程并發(fā)的情況下,I/O Completion 就可能集中在某一個 vCPU 上執(zhí)行,這樣會造成瓶頸,導致性能無法提升。
參數(shù) rq_affinity 的值為 2 時,表示塊設(shè)備收到 I/O Completion 的事件時,這個 I/O 會在當初下發(fā)的 vCPU 上執(zhí)行。在多線程并發(fā)的情況下,就可以完全充分發(fā)揮各個 vCPU 的性能。
綁定對應(yīng)的 vCPU
普通模式下,一個設(shè)備(Device)只有一個請求列表(Request-Queue)。在多線程并發(fā)處理 I/O 的情況下,這個唯一的 Request-Queue 就是一個性能瓶頸點。
最新的多隊列(Multi-Queue)模式下,一個設(shè)備(Device)可以擁有多個處理 I/O 的 Request-Queue,可以充分發(fā)揮后端存儲的性能。如果您有 4 個 I/O 線程,您需要將 4 個線程分別綁定在不同的 Request-Queue 對應(yīng)的 CPU Core 上,這樣就可以充分利用 Multi-Queue 提升性能。
為了充分發(fā)揮設(shè)備(Device)的性能,需要將 I/O 線程分發(fā)到不同的 Request-Queue 上處理。腳本 test100w.sh 中通過 fio --ioengine=libaio --runtime=30s --numjobs=${numjobs} --iodepth=${iodepth} --bs=${bs} --rw=${rw} --filename=${filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split 分別將幾個 jobs 綁定不同的 CPU Core 上,其中 vd* 為您的云盤設(shè)備名,例如,/dev/vdb。
FIO 提供了參數(shù) cpus_allowed 以及 cpus_allowed_policy 用來綁定 vCPU。以上命令一共運行了幾個 jobs,分別綁定在幾個 CPU Core上,分別對應(yīng)著不同的 Queue_Id。
關(guān)于如何查看 Queue_Id 綁定的 cpu_core_id,您可以:
運行 ls /sys/block/vd*/mq/ 查看設(shè)備名為 vd* 云盤的 Queue_Id,例如 vdb。
運行 cat /sys/block/vd*/mq/*/cpu_list 查看對應(yīng)設(shè)備名為 vd* 云盤的 Queue_* 綁定到的 cpu_core_id。
以上是壓測ESSD云盤性能的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!