Linux實例和Windows實例都推薦使用FIO工具測試塊存儲性能。
說明 您也可以使用其他工具測試塊存儲性能,但不同工具測試出來的硬盤基准性能會有差異,如dd、sysbench、iometer等工具可能會受到測試參數配置和文件系統影響,難以反映真實的磁盤性能。
本文以Linux實例和FIO為例,說明如何使用FIO測試塊存儲性能。在進行測試前,請確保塊存儲設備已經4 KiB對齊。
警告 測試裸盤可以獲得真實的塊存儲盤性能,但直接測試裸盤會破壞文件系統結構,請在測試前提前做好數據備份。建議您只在新購無數據的ECS實例上使用工具測試塊存儲性能,避免造成數據丟失。
- 測試隨機寫IOPS,運行以下命令:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
- 測試隨機讀IOPS,運行以下命令:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
- 測試順序寫吞吐量,運行以下命令:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
- 測試順序讀吞吐量,運行以下命令:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing
下表以測試隨機寫IOPS的命令為例,說明命令中各種參數的含義。
參數 | 說明 |
---|---|
-direct=1 | 表示測試時忽略I/O緩存,數據直寫。 |
-iodepth=128 | 表示使用AIO時,同時發出I/O數的上限為128。 |
-rw=randwrite | 表示測試時的讀寫策略為隨機寫(random writes)。作其它測試時可以設置為:
|
-ioengine=libaio | 表示測試方式為libaio(Linux AIO,異步I/O)。應用程序使用I/O通常有兩種方式:
|
-bs=4k | 表示單次I/O的塊文件大小為4 KB。未指定該參數時的默認大小也是4 KB。 測試IOPS時,建議將bs設置為一個比較小的值,如本示例中的4k。 測試吞吐量時,建議將bs設置為一個較大的值,如本示例中的1024k。 |
-size=1G | 表示測試文件大小為1 GiB。 |
-numjobs=1 | 表示測試線程數為1。 |
-runtime=1000 | 表示測試時間為1000秒。如果未配置,則持續將前述-size指定大小的文件,以每次-bs值為分塊大小寫完。 |
-group_reporting | 表示測試結果里匯總每個進程的統計信息,而非以不同job匯總展示信息。 |
-filename=iotest | 指定測試文件的名稱,比如iotest。測試裸盤可以獲得真實的硬盤性能,但直接測試裸盤會破壞文件系統結構,請在測試前提前做好數據備份。 |
-name=Rand_Write_Testing | 表示測試任務名稱為Rand_Write_Testing,可以隨意設定。 |