fio压测关键在选对场景、绕过干扰、看清指标:须测裸盘或大文件而非挂载路径,必加direct=1;分随机读/写、顺序读、混合读写四类场景配置参数;重点关注BW、IOPS和clat(50th/99th)。

Linux 存储性能压测用 fio 最直接有效,关键不在参数堆得多,而在选对场景、绕过干扰、看清指标。
测试前必须绕开的两个坑
一是别直接测文件系统设备路径,比如 /dev/mapper/centos-root 或 /dev/sda1。fio 会覆盖数据甚至破坏文件系统结构。正确做法是:要么测裸盘(如 /dev/vdb,确保该盘未挂载、无数据),要么在目标盘上建大文件(如 /mnt/testdisk/test.fio)再测。
二是务必启用 direct=1。不加这个参数,测试走的是 page cache,结果反映的是内存速度,不是磁盘真实性能。哪怕只差这一个开关,IOPS 和延迟可能差出 10 倍。
四类核心场景对应的关键参数组合
不同业务对 IO 的诉求差异极大,不能只跑一种模式:
-
随机读(数据库索引、小文件服务):用
rw=randread+bs=4k+iodepth=64+numjobs=4~8。重点看 IOPS 和平均延迟(clat)。 -
随机写(日志写入、事务提交):用
rw=randwrite+bs=4k+ioengine=libaio+direct=1。SSD 要关注写放大和稳定态表现,可加--time_based --runtime=300多跑几分钟。 -
顺序读(备份、大文件分析):用
rw=read+bs=1M+numjobs=2~4。吞吐量(MB/s)比 IOPS 更有参考价值。 -
混合读写(OLTP 场景):用
rw=randrw+rwmixread=70(读占 70%)+bs=8k。观察读写各自带宽是否均衡,延迟分布是否偏斜。
结果里真正要盯住的三个数字
fio 报告很长,但日常压测只需聚焦三项:
- BW(带宽):单位 MiB/s 或 KiB/s,反映吞吐能力。顺序读写看它,随机 IO 则更关注 IOPS(BW ÷ bs)。
-
IOPS:报告中常写作
IO-Depth=64下的数值,是衡量高并发能力的核心指标。 -
clat(完成延迟):尤其是
50th(中位数)和99th(长尾)百分位,比平均值更能暴露抖动问题。例如 SSD 随机写 clat 99th 超过 20ms,就要警惕垃圾回收影响。
提升复现性和对比度的实操建议
同一台机器反复测,结果也可能飘。几个小动作让数据更稳:
- 测试前清空缓存:
echo 3 > /proc/sys/vm/drop_caches,并swapoff -a防止 swap 干扰; - 绑定 CPU 核心避免调度抖动:
taskset -c 0-3 fio ...; - 裸盘测试时,用
hdparm -I /dev/vdb确认磁盘未启用写缓存(Write cache: disabled),否则结果虚高; - 多次运行取中位数,单次测试时间建议 ≥ 60 秒,避开瞬时波动。











