一、FIO工具介紹
fio
(Flexible I/O Tester)是一個用于評估計算機系統中 I/O 性能的強大工具。?官網:fio - fio - Flexible IO Tester
注意事項!
1、不要指定文件系統名稱(如/dev/mapper/centos-root),避免造成文件系統損壞。
2、最好測試前備份重要數據
二、安裝FIO
#本次安裝版本為3.20版本,往上版本需要gcc版本大于4.9版本,3.20版本百度網盤下載鏈接:?https://pan.baidu.com/s/1kX7NLxwhRcFLOvnOdRp5Vg?pwd=rdzt 提取碼: rdzt
[root@dt1 yixing]# wget https://git.kernel.dk/cgit/fio/snapshot/fio-3.20.tar.gz
[root@dt1 yixing]# tar -xvf fio-3.20.tar.gz
[root@dt1 fio-3.37]# cd fio-3.20
[root@dt1 fio-3.20]# yum install gcc libaio-devel -y
[root@dt1 fio-3.20]# ./configure --prefix=/usr/local/fio-3.20
[root@dt1 fio-3.20]# make && make install
[root@dt1 fio-3.20]# ln -s /usr/local/fio-3.20/bin/fio /usr/bin/fio
#查看版本
[root@dt1 fio-3.20]# fio -v
三、磁盤性能測試
參數
- -filename=/dev/vdb? ? ? ? #指定測試的目標文件或設備,最好不要指定文件系統名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(如/dev/mapper/centos-root),避免造成文件系統損壞。
- -direct=1? ? ? ? ? ? ? ? ? ? ? ? #使用直接 I/O 模式,即繞過文件系統緩存,直接訪問磁盤。這通常? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用于測量真實的磁盤性能。
-iodepth=4? ? ? ?#
每個作業的 I/O 深度。如果模擬高并發負責情況,值可寫32。-
-rw=randwrite? ? ?#
指定測試中使用的讀寫模式。randwrite
表示隨機寫入,即測試將? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?會對設備進行隨機位置的寫入操作。還有randread(隨機讀)read? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(順序讀)write(順序寫)randrw(混合隨機讀寫) -ioengine=libaio? ?#
指定 I/O 引擎。libaio
是 Linux 下的異步 I/O 引擎,用于提高性能? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 并允許并發操作。-
-bs=4k? ? ? ? ? #
每個 I/O 操作的塊大小。這里設置為 4KB,即每次讀寫操作的數據? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?塊大小為 4KB。 -
-size=10G? ? ? ? #
指定測試文件或設備的大小。 -
-numjobs=4? ? ? ?#
同時運行的作業數。這里設置為 4,表示fio
將會啟動 4 個并發作? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?業來執行測試。不要超過cpu核數。 -
-runtime=180? ? ? #
測試的運行時間。這里設置為 180 秒(3分鐘),即測試將持續運? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 行3 分鐘。 -
-group_reporting? ?#
匯總報告輸出。當多個作業同時運行時,使用此選項可以合并它們? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 的結果輸出。 -
-name=iotest_randwrite #
為這個測試任務指定一個名稱
測試參數值建議
- 測試吞吐量和延遲:順序I/O、較大的塊大小
- 測試IOPS和延遲:隨機I/O、較小的塊大小
IOPS:磁盤在1s中進行幾次io讀寫操作
吞吐量:磁盤每秒IO的流量
測試隨機寫IOPS
#將創建/data/yixing/test文件
[root@dt1 yixing]# fio -filename=/data/yixing/test -direct=1 -iodepth=4 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=4 -runtime=60 -group_reporting -name=randwrite
#刪掉測試文件
[root@dt1 yixing]# rm -rf test
#如果報一下錯誤,加上-allow_mounted_write=1
fio: /dev/vdb appears mounted, and 'allow_mounted_write' isn't set. Aborting.?
?測試隨機讀IOPS
#將創建/data/yixing/test文件
[root@dt1 yixing]# fio -filename=/data/yixing/test -direct=1 -iodepth=4 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=4 -runtime=60 -group_reporting -name=randread
[root@dt1 yixing]# rm -rf test
測試順序讀吞吐量
#將創建/data/yixing/test文件
[root@dt1 yixing]# fio -filename=/data/yixing/test -direct=1 -iodepth=4 -rw=read -ioengine=libaio -bs=4k -size=4G -numjobs=4 -runtime=180 -group_reporting -name=read
[root@dt1 yixing]# rm -rf test
測試順序寫吞吐量
#將創建/data/yixing/test文件
[root@dt1 yixing]# fio -filename=/data/yixing/test -direct=1 -iodepth=4 -rw=write -ioengine=libaio -bs=4k -size=4G -numjobs=4 -runtime=180 -group_reporting -name=write