Linux存储高并发吞吐测试需用fio组合-numjobs与-iodepth模拟真实I/O压力,测吞吐量(MB/s)、IOPS和延迟;须绕过缓存、启用异步IO,并按场景配置随机读、顺序写或混合读写参数。

Linux 存储系统高并发吞吐能力的测试,核心是模拟真实业务场景下的多路、高密度I/O压力,并准确采集吞吐量(MB/s)、IOPS和延迟三项关键指标。不能只跑单线程顺序读写,必须组合队列深度、并发作业数与不同IO模式,才能暴露存储瓶颈。
选对工具:fio 是当前最可靠的选择
fio 支持精细控制IO类型、块大小、队列深度、线程数和运行时长,适配NVMe、SSD、分布式存储等各类后端。安装命令统一:
- CentOS/RHEL:
sudo yum install fio - Ubuntu/Debian:
sudo apt-get install fio
关键参数必须协同设置
单设 -numjobs 或仅调 -iodepth 都无法真实压测:
-
-numjobs=N表示启动 N 个并行IO进程(不是线程数) -
-iodepth=M表示每个进程维持 M 个未完成IO请求(即队列深度) - 实际并发请求数 = N × M,例如
numjobs=16 iodepth=32→ 512路并发 -
-direct=1强制绕过page cache,测的是真实磁盘性能 -
-ioengine=libaio启用Linux异步IO,避免同步阻塞拖慢吞吐
按场景设计典型测试命令
-
高并发随机读(如数据库索引查询):
fio -filename=/mnt/test.img -rw=randread -bs=4k -numjobs=64 -iodepth=32 -runtime=120 -direct=1 -ioengine=libaio -group_reporting -
高吞吐顺序写(如日志归档):
fio -filename=/mnt/test.img -rw=write -bs=1M -numjobs=16 -iodepth=16 -runtime=120 -direct=1 -ioengine=libaio -group_reporting -
混合读写(如OLTP):
fio -filename=/mnt/test.img -rw=randrw -rwmixread=70 -bs=8k -numjobs=32 -iodepth=64 -runtime=120 -direct=1 -ioengine=libaio -group_reporting
结果解读要抓重点数据
输出中关注三组数字:
-
bw=后的数值(单位通常是 KiB/s 或 MiB/s),换算成 MB/s 即吞吐量 -
iops=后的整数,代表每秒完成的IO操作次数 -
lat=中的avg值(单位微秒或毫秒),反映响应延迟稳定性 - 若
clat percentiles中 99% 延迟远高于平均值,说明存在长尾抖动,需排查队列调度或硬件排队问题
测试前必须检查的硬约束
- 测试文件必须建在待评估的存储挂载点下(如
/mnt/pfs/),严禁写入/dev/sdX等裸设备(除非明确测试底层盘) - 单次测试文件大小建议 ≥ 2× RAM,避免缓存干扰;可用
dd if=/dev/zero of=testfile bs=1G count=10 oflag=direct预分配 - 关闭写缓存(
hdparm -W0 /dev/sdX)或确认阵列缓存策略,否则结果不可复现 - 多节点测试时,确保各客户端负载均衡,避免单点网络拥塞掩盖存储真实能力
不复杂但容易忽略


















