實踐概述
天翼云提供的云硬盤根據磁盤類型的不同擁有不同的性能和價格,詳細信息請參見磁盤類型及性能介紹。
FIO 是對磁盤性能進行壓力測試和驗證的常用工具,本實踐將使用FIO工具,介紹云硬盤性能測試的方法。
操作前準備
本節主要介紹在進行具體操作之前用戶需要做的準備工作,包括測試前檢查、工具安裝和FIO參數介紹。
測試前檢查
進行測試前,請首先完成云硬盤的掛載和初始化,操作請參考掛載云硬盤和初始化云硬盤。
注意
測試磁盤性能時,建議直接測試裸數據盤(如 /dev/vdb),但有可能會破壞磁盤上的文件系統結構,請在測試前提前做好數據備份。
強烈建議您不要將系統盤或者含有重要數據的數據盤作為測試對象。建議您在空白的數據盤上測試性能,避免造成數據丟失。
登錄到測試云主機,執行以下命令,查詢待測試的磁盤分區是否已經4KiB對齊。
sudo fdisk -lu若返回結果中待測試磁盤的Start值能被8整除即是4KiB對齊。下圖中的回顯表示該磁盤分區已4KiB對齊。
如Start值不能被8整除,則表示未4KiB對齊,那么請刪除原有分區后再繼續測試,重新按照4KiB對齊選擇初始磁柱編號。

工具安裝
依次執行以下命令,安裝libaio和測試工具FIO。
sudo yum install libaio -y
sudo yum install libaio-devel -y
sudo yum install fio –yFIO工具參數介紹
不同場景的測試公式基本一致,根據不同的測試目標,部分參數會有所不同,如下表所示。
| 參數 | 說明 |
| direct | 指定 direct 模式,默認值為1。
|
| numjobs | 并發線程數,默認為1。 當被測試磁盤性能較高時推薦加大numjobs數以增加壓力。 |
| iodepth | 測試時的IO隊列深度。 隊列深度是指每個線程的隊列深度,如果有多個線程測試,意味著每個線程都是此處定義的隊列深度。FIO總的IO并發數=iodepth * numjobs。 |
| rw | 測試時的讀寫策略。可選值如下:
|
| ioengine | 測試時FIO選擇哪種I/O引擎,本實踐中選擇libaio。 |
| bs | 每次請求的塊大小(block size)。默認值為4k。 |
| size | 測試文件大小。取值如下:
|
| runtime | 測試時間,即FIO運行時長。 如果未配置該參數,則持續將size指定的文件大小,以每次bs值為分塊大小讀/寫完。 |
| time_based | 采用的時間模式。 無需設置該參數值,只要 FIO 基于時間來運行。 |
| group_reporting | 多個 job 并發時,打印整個 group 的統計值。 |
| filename | 測試對象,可以是磁盤設備名稱(如/dev/vdb),或文件地址(如/opt/fiotest/fiotest.txt)。 |
| name | 本次測試任務的名稱。 |
操作步驟
以下為常見的云硬盤性能測試命令:
注意
以下命令中,filename參數指定的設備名為/dev/test_device,請您根據實際情況替換為磁盤設備名稱(如/dev/vdb),或文件地址(如/opt/fiotest/fiotest.txt)。
測試云硬盤的隨機寫IOPS:
fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=4 -runtime=1000 -group_reporting -filename=/dev/test_device -name=RandWrite_Testing測試云硬盤的隨機讀IOPS:
fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=4 -runtime=1000 -group_reporting -filename=/dev/test_device -name=RandRead_Testing測試云硬盤的順序寫吞吐量:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/test_device -name=Write_Testing測試云硬盤的順序讀吞吐量:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/test_device -name=Read_Testing測試云硬盤的隨機寫時延:
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/test_device -name=RandWrite_Latency_Testing測試云硬盤的隨機讀時延:
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/test_device -name=RandRead_Latency_Testing