dd适合快速验证磁盘顺序读写能力或排除硬件故障,fio则能精准模拟真实业务场景(如数据库随机小写),输出iops、延迟、吞吐量等关键指标,并支持iodepth、bs、rw等参数精细建模。

dd 和 fio 都能测磁盘,但它们不是同一类工具:dd 是数据搬运工,fio 是专业压力测试仪。想看磁盘在真实业务下的表现,比如数据库随机小写、高并发日志刷盘,dd 给不出答案;fio 才能模拟这些场景,并输出 IOPS、延迟、吞吐量等关键指标。
dd 适合什么场景
dd 的价值在于快和稳——适合快速验证基础写入能力或排除明显硬件故障:
- 用
dd if=/dev/zero of=/test bs=1M count=2000 oflag=direct测顺序写速度,绕过缓存,结果接近理论带宽上限 - 用
dd if=/test of=/dev/null bs=1M测顺序读,确认链路通、介质可读 - 不建议用 dd 测 SSD 或 RAID 的随机性能,它无法触发队列深度、也无法反映延迟抖动
fio 的核心控制点
fio 的强大来自对 I/O 行为的精细建模。几个参数决定测试是否贴近实际:
-
rw:选
randread(查库)、randwrite(写日志)、randrw(混合负载),而非默认的顺序模式 -
bs:OLTP 类应用常用
4k或8k;大文件备份用1M;别盲目设大,小块更能暴露延迟问题 - iodepth:SSD 建议从 32 起步,HDD 可设 4–8;值太小压不出并发能力,太大可能掩盖调度瓶颈
- direct=1 必开,否则测的是内存+缓存,不是磁盘本身
一个实用的 fio 测试命令模板
以下命令模拟典型数据库写入压力(4K 随机写、32 深度、4 线程、持续 60 秒):
fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --iodepth=32 --numjobs=4 --size=2G --runtime=60 --time_based --direct=1 --group_reporting
执行后会输出三类关键数据:IOPS(每秒操作数)、lat (avg)(平均延迟)、bw(带宽 MB/s)。重点关注 99% 延迟值,它比平均值更能反映响应稳定性。
搭配 iostat 实时观察更可靠
单独跑 fio 容易忽略系统级干扰。建议另起终端运行:
iostat -x 1
关注字段:%util 接近 100% 表示设备饱和;await 高说明请求排队久;r_await/w_await 分开看读写响应;svctm 已被弃用,以 await 为准。











