您好,登錄后才能下訂單哦!
這篇文章主要介紹壓測ESSD云盤性能的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
如何壓測 ESSD 云盤的性能
ESSD 云盤,又稱增強型(Enhanced) SSD 云盤,是阿里云全新推出的超高性能的云盤產品。由于壓測云盤的性能時,云盤本身以及壓測條件都起著重要的作用,因此本文提供了如何配置合適的條件壓測 ESSD 云盤性能的示例,并測試出 100 萬 IOPS。
警告:
測試裸盤可以獲得真實的塊存儲盤性能,但直接測試裸盤會破壞文件系統結構,請在測試前提前做好數據備,例如,創建磁盤快照。建議您只在新購無數據的 ECS 實例上使用工具測試塊存儲性能,避免造成數據丟失。
準備工作
為了充分發揮出多核多并發的系統性能,壓測出 100 萬 IOPS 性能指標,您可以參閱以下建議測試 ESSD 云盤的性能。
鏡像推薦
您可以使用阿里云官方 鏡像 中高版本的 Linux 鏡像版本。例如,CentOS 7.4/7.3/7.2 64 位和 AliyunLinux 17.1 64 位操作系統。由于對應的驅動還不夠完善,不推薦使用其他低版本的 Linux 鏡像和 Windows 鏡像。
工具推薦
您可以使用 FIO 作為云盤性能標準的測試工具。
實例規格推薦
目前只有存儲增強型 g5se 實例規格族支持掛載 ESSD 云盤,您需要 申請 加入使用存儲增強型 g5se 實例規格族白名單。申請審核完成后,您便可以同時選購存儲增強型 g5se 實例規格族和 ESSD 云盤。
操作示例
以實例規格 ecs.g5se.18xlarge 為例,同時 ESSD 云盤的設備名為 /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 新建腳本文件,并粘貼以下內容,腳本為隨機寫 randwrite IOPS 性能測試示例。
function RunFio { numjobs=$1 # 實例中的測試線程數,如示例中的 8 iodepth=$2 # 同時發出I/O數的上限,如示例中的 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'
注意:
因測試環境而異,腳本中您需要修改的命令行有:
命令行 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。
直接測試裸盤會破壞文件系統結構,如果云盤上的數據丟失不影響業務,可以設置 filename=[設備名,如本示例中的/dev/vdb]。否則,請設置為 filename=[具體的文件路徑,比如/mnt/test.image]。
運行 sh test100w.sh 開始測試 ESSD 云盤性能。
腳本解讀
塊設備參數
測試實例時,腳本 test100w.sh 中的命令echo 2 > /sys/block/vdb/queue/rq_affinity 是將 ECS 實例中的塊設備中的參數 rq_affinity 值修改為 2:
參數 rq_affinity 的值為 1 時,表示塊設備收到 I/O 完成(I/O Completion)的事件時,這個 I/O 被發送回處理這個 I/O 下發流程的 vCPU 所在 Group 上處理。在多線程并發的情況下,I/O Completion 就可能集中在某一個 vCPU 上執行,這樣會造成瓶頸,導致性能無法提升。
參數 rq_affinity 的值為 2 時,表示塊設備收到 I/O Completion 的事件時,這個 I/O 會在當初下發的 vCPU 上執行。在多線程并發的情況下,就可以完全充分發揮各個 vCPU 的性能。
綁定對應的 vCPU
普通模式下,一個設備(Device)只有一個請求列表(Request-Queue)。在多線程并發處理 I/O 的情況下,這個唯一的 Request-Queue 就是一個性能瓶頸點。
最新的多隊列(Multi-Queue)模式下,一個設備(Device)可以擁有多個處理 I/O 的 Request-Queue,可以充分發揮后端存儲的性能。如果您有 4 個 I/O 線程,您需要將 4 個線程分別綁定在不同的 Request-Queue 對應的 CPU Core 上,這樣就可以充分利用 Multi-Queue 提升性能。
為了充分發揮設備(Device)的性能,需要將 I/O 線程分發到不同的 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* 為您的云盤設備名,例如,/dev/vdb。
FIO 提供了參數 cpus_allowed 以及 cpus_allowed_policy 用來綁定 vCPU。以上命令一共運行了幾個 jobs,分別綁定在幾個 CPU Core上,分別對應著不同的 Queue_Id。
關于如何查看 Queue_Id 綁定的 cpu_core_id,您可以:
運行 ls /sys/block/vd*/mq/ 查看設備名為 vd* 云盤的 Queue_Id,例如 vdb。
運行 cat /sys/block/vd*/mq/*/cpu_list 查看對應設備名為 vd* 云盤的 Queue_* 綁定到的 cpu_core_id。
以上是壓測ESSD云盤性能的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。