mkdir test-data
fio –rw=write –ioengine=sync –fdatasync=1 –directory=test-data –size=2200m –bs=2300 –name=mytest
命令分解
mkdir test-data # 创建测试目录
fio \
--rw=write # 测试模式:纯写入
--ioengine=sync # I/O引擎:同步阻塞写入(模拟最严苛的持久化场景)
--fdatasync=1 # 每次写入后调用fdatasync(),确保数据刷到磁盘(类似数据库安全写入)
--directory=test-data # 测试目录
--size=2200m # 每个线程写入总量:2200MB
--bs=2300 # 块大小:2300字节(模拟非常规小块写入)
--name=mytest # 任务名称
关键参数作用
参数 | 意义 | |
---|---|---|
--rw=write | 测试写入性能(非随机写入)。 | |
--ioengine=sync | 使用同步I/O,每次写操作必须等待磁盘确认完成(性能低但数据安全)。 | |
--fdatasync=1 | 每次写操作后调用 fdatasync() ,强制刷新内核缓冲区到磁盘(类似 fsync 但略轻量)。 | |
--bs=2300 –size=2200m | 设置非常规块大小(通常用4K/8K),可能是为了模拟特定业务场景的小数据块写入。 总写入量足够大,避免缓存影响测试结果。 |
典型应用场景
- 数据库持久化测试
- 模拟事务日志(如WAL)的写入性能,因为
sync+fdatasync
是数据库保证ACID的常用配置。
- 磁盘可靠性验证
- 测试磁盘在强制刷盘模式下的实际吞吐和延迟。
- 性能调优基准
- 对比不同文件系统/磁盘设备在小块同步写入时的表现。
输出结果关注点
运行后会显示以下关键指标:
- IOPS:每秒写入次数(2300字节/次)。
- 带宽(BW):实际写入吞吐(如 MB/s)。
- 延迟(lat):每次写入的平均耗时(尤其关注
sync
和fdatasync
的开销)。
示例输出片段:
write: IOPS=500, BW=1.12MiB/s (1.17MB/s)
sync (usec): min=100, max=10000, avg=2000
fdatasync: 1 calls, total=10ms
注意事项
- 磁盘压力:此命令会高负载写入,避免在生产环境直接运行。
- 块大小优化:
bs=2300
可能导致未对齐写入,正常测试建议用4K
的整数倍。 - 对比测试:移除
--fdatasync=1
和--ioengine=sync
可测试缓存写入性能(速度会快很多)。