性能测试工具_磁盘性能测试工具fio
1.磁盤性能測試工具FIO
FIO是常見的磁盤性能測試工具,使用 FIO 時,建議配合使用 libaio 的 I/O 引擎進行測試。
一般使用以下指標衡量硬盤的性能:
IOPS:每秒讀/寫次數,單位為次(計數)。存儲設備的底層驅動類型決定了不同的 IOPS。
吞吐量:每秒的讀寫數據量,單位為MB/s。
時延:I/O 操作的發(fā)送時間到接收確認所經過的時間,單位為秒。
2.測試建議與注意事項
l建議在空閑的、未保存重要數據的硬盤上進行 FIO 測試,并在測試完后重新制作被測硬盤的文件系統(tǒng)。
l測試硬盤性能時,建議直接測試裸數據盤(如 /dev/vdb)。
l測試文件系統(tǒng)性能時,推薦指定具體文件測試(如 /data/file)。
l請不要在系統(tǒng)盤上進行 FIO 測試,避免損壞系統(tǒng)重要文件。
l為避免底層文件系統(tǒng)元數據損壞導致數據損壞,請不要在業(yè)務數據盤上進行測試。
參數說明:
參數名 | 說明 | 取值樣例 |
bs | 每次請求的塊大小。取值包括4k、8k及16k等 | 4k |
ioengine | I/O 引擎。推薦使用 Linux 的異步 I/O 引擎。 | libaio |
direct | 指定 direct 模式。 True(1)表示指定 O_DIRECT 標識符,忽略 I/O 緩存,數據直寫。 False(0)表示不指定 O_DIRECT 標識符。 默認為 True(1)。 | 1 |
rw | 讀寫模式。取值包括順序讀(read)、順序寫(write)、隨機讀 (randread)、隨機寫(randwrite)、混合隨機讀寫(randrw)和混合 順序讀寫(rw,readwrite)。 | read |
time_based | 指定采用時間模式。無需設置該參數值,只要 FIO 基于時間來運行。 | N/A |
runtime | 指定測試時長,即 FIO 運行時長 | 600 |
refill_buffers | FIO 將在每次提交時重新填充 I/O 緩沖區(qū)。默認設置是僅在初始時填充并重 用該數據。 | N/A |
norandommap | 在進行隨機 I/O 時,FIO 將覆蓋文件的每個塊。若給出此參數,則將選擇新 的偏移量而不查看 I/O 歷史記錄。 | N/A |
randrepeat | 本隨機序列是否可重復,True(1)表示隨機序列可重復,False(0)表示隨 機序列不可重復。默認為 True(1)。 | 0 |
group_reporting | 多個 job 并發(fā)時,打印整個 group 的統(tǒng)計值。 | N/A |
name | job 的名稱。 | fio-read |
size | I/O 測試的尋址空間。 | 100GB |
filename | 測試對象,即待測試的磁盤設備名稱。 | /dev/sdb |
zero_buffers? | 用0初始化系統(tǒng)buffer | |
nrfiles=8 | 每個進程生成文件的數量 | |
3.常見測試方案
3.1讀性能測試用例
普通模式:
#4k隨機讀 $ fio --bs=4k --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #8k隨機讀 $ fio --bs=8k --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #64k隨機讀 $ fio --bs=64k --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #1M隨機讀 $ fio --bs=1m --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb |
3.2寫性能測試用例
普通模式:
#4k隨機寫 $ fio --bs=4k --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #8k隨機寫 $ fio --bs=8k --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #64k隨機寫 $ fio --bs=64k --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #1M隨機寫 $ fio --bs=1m --ioengine=libaio --iodepth=128 --direct=1 --rw=randwrite --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb |
3.3吞吐測試用例
4M順序寫
$ fio --bs=4m --ioengine=libaio --iodepth=128 --direct=1 --rw=write --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb
#4M順序讀
$ fio --bs=4m --ioengine=libaio --iodepth=128 --direct=1 --rw=read --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb
3.4 混合讀寫測試用例
普通模式:
#4k隨機讀寫 70%讀30%寫 $ fio --bs=4k --ioengine=libaio --iodepth=128 --direct=1 --rw=randrw –rwmixread=70? --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #4k隨機讀寫 70%寫30%讀 $ fio --bs=4k --ioengine=libaio --iodepth=128 --direct=1 --rw=randrw –rwmixread=30? --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #4k隨機讀寫 50%讀50%寫 $ fio --bs=4k --ioengine=libaio --iodepth=128 --direct=1 --rw=randrw –rwmixread=50? --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #64k隨機讀寫 70%讀30%寫 $ fio --bs=64k --ioengine=libaio --iodepth=128 --direct=1 --rw=randrw –rwmixread=70? --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #64k隨機讀寫 70%寫30%讀 $ fio --bs=64k --ioengine=libaio --iodepth=128 --direct=1 --rw=randrw –rwmixread=30? --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb #64k隨機讀寫 50%讀50%寫 $ fio --bs=64k --ioengine=libaio --iodepth=128 --direct=1 --rw=randrw –rwmixread=50? --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-write --size=1G --filename=/dev/vdb |
4.云硬盤測試方案
4.1時延性能測試用例
bs = 4k iodepth = 1:隨機讀/寫測試,能反映硬盤的時延性能
執(zhí)行以下命令,測試硬盤的隨機讀時延
fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randread -time_based -runtime=600? -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-lat --size=10G -filename=/dev/vdb
執(zhí)行以下命令,測試硬盤的隨機寫時延。
fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randwrite -time_based -runtime=600? -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randwrite-lat --size=10G -filename=/dev/vdb
執(zhí)行以下命令,測試 SSD 云硬盤的隨機混合讀寫時延性能。
fio --bs=4k --ioengine=libaio --iodepth=1 --direct=1 --rw=randrw --time_based --runtime=100 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-read --size=1G --filename=/dev/vdb
測試結果如下圖所示:
4.2吞吐性能測試用例
bs = 128k iodepth = 32:順序讀/寫測試,能反映硬盤的吞吐性能
執(zhí)行以下命令,測試硬盤的順序讀吞吐帶寬。
fio -bs=128k -ioengine=libaio -iodepth=32 -direct=1 -rw=read -time_based -runtime=600? -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-read-throughput --size=10G -filename=/dev/vdb
執(zhí)行以下命令,測試硬盤的順序寫吞吐帶寬。
fio -bs=128k -ioengine=libaio -iodepth=32 -direct=1 -rw=write -time_based -runtime=600? -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-write-throughput --size=10G -filename=/dev/vdb
執(zhí)行以下命令,測試 SSD 云硬盤的順序讀吞吐性能。
fio --bs=128k --ioengine=libaio --iodepth=32 --direct=1 --rw=read --time_based --runtime=100 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-rw --size=1G --filename=/dev/vdb
測試結果如下圖所示
4.3 IOPS性能測試用例
bs = 4k iodepth = 32:隨機讀/寫測試,能反映硬盤的 IOPS 性能
執(zhí)行以下命令,測試硬盤的隨機讀 IOPS。
fio -bs=4k -ioengine=libaio -iodepth=32 -direct=1 -rw=randread -time_based -runtime=600? -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-iops --size=10G -filename=/dev/vdb
執(zhí)行以下命令,測試硬盤的隨機寫 IOPS。
fio -bs=4k -ioengine=libaio -iodepth=32 -direct=1 -rw=randwrite -time_based -runtime=600? -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randwrite-iops --size=10G -filename=/dev/vdb
測試 SSD 云硬盤的隨機讀 IOPS 性能。如下圖所示:
總結
以上是生活随笔為你收集整理的性能测试工具_磁盘性能测试工具fio的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装百分之80卡住_新车买回来要不要安装
- 下一篇: pylucene构建索引_pyLucen