fio是评估Linux磁盘真实性能的首选工具,因其能精准模拟4K随机读写等典型负载;dd和hdparm仅测顺序吞吐或受缓存干扰,无法反映数据库、虚拟机等真实场景下的IOPS与延迟表现。

直接用 fio 测,别用 dd 或 hdparm —— 它们没法模拟真实随机访问模式,测出来的是顺序吞吐或缓存干扰值。
用 fio 跑标准 4K 随机读写
数据库、虚拟机、容器等典型负载都以 4KB 为基本 IO 单位。推荐命令如下:
-
随机读 IOPS 和吞吐:
fio -name=randread -ioengine=libaio -rw=randread -bs=4k -direct=1 -size=2G -iodepth=32 -numjobs=4 -runtime=60 -group_reporting -filename=/dev/sdx -
随机写 IOPS 和吞吐:
fio -name=randwrite -ioengine=libaio -rw=randwrite -bs=4k -direct=1 -size=2G -iodepth=32 -numjobs=4 -runtime=60 -group_reporting -filename=/dev/sdx
关键点:-bs=4k 匹配主流应用页大小;-direct=1 绕过 page cache;-iodepth=32 和 -numjobs=4 合计提供 128 深度队列,压出设备真实能力;-filename=/dev/sdx 直接测裸设备(避开文件系统开销),更准。
区分读写比例与混合负载
纯读/纯写只是基准,真实业务常是读多写少或读写交织:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 70% 读 + 30% 写(如 OLTP):
-rw=randrw -rwmixread=70 - 强调写持久性(如 WAL 日志):
-sync=1强制每次写后落盘,延迟升高但结果贴合强一致性场景 - 避免重复打同一区域(尤其小文件测试):
-norandommap让 fio 不复用偏移,更接近真实随机分布
看懂输出里的吞吐和 IOPS
fio 报告末尾的 “bw” 是吞吐量(KB/s 或 MB/s),“iops” 是每秒请求数。例如:
read : io=614400KB, bw=10240KB/s, iops=2560, runt= 60001msec说明:平均吞吐 10.24 MB/s,IOPS 2560(因 bs=4k,10240 ÷ 4 = 2560)。注意单位——fio 默认输出 KB/s,除以 1024 得 MB/s,再除以块大小(KB)即得 IOPS。
验证是否真在随机访问
跑完后检查 iostat -x 1 输出中的 r/s 和 rkB/s 比值:
- 若 r/s 达 2000+,但 rkB/s 只有 ~8000(即 ≈ 4KB × r/s),说明确实是小块随机读
- 若 r/s 很低(如 100)、rkB/s 却很高(如 100MB/s),那实际是大块顺序读,参数可能设错了
- 搭配
iotop -o看 fio 进程是否真在发随机 IO,排除缓存或误测文件系统层的干扰

















