fio
Flexible I/O Tester,面向 Linux 与服务器存储的 I/O 压测工具,用于测量顺序/随机读写、IOPS、带宽与延迟。
[!info] related notes
- 相关主题:
- 相关 MOC:
- 相关 howto:
fio
这是什么
fio(Flexible I/O Tester)是常用的存储 I/O 基准与压力测试工具。它可以精确控制块大小、读写模式、队列深度、并发数和测试时长,用来测量磁盘或云盘的带宽、IOPS 与延迟。
一句话定位:YABS 负责一键综合验货,fio 负责把磁盘 / 云盘性能单独做严谨测试。
在 VPS 验货里主要看什么
顺序读写
适合观察大文件传输、备份、镜像、日志归档等工作负载的吞吐能力。
随机读写
更能反映数据库、容器、包管理器、构建缓存和大量小文件操作的体验。
IOPS
IOPS 是每秒 I/O 操作次数。小块随机 I/O 场景中,它通常比单纯 MB/s 更有意义。
延迟
同样的 IOPS,如果延迟高且波动大,交互体验和数据库尾延迟也可能很差。评价云盘时不要只看峰值带宽。
常见测试思路
测试前应先确认测试文件路径和剩余空间,避免把系统盘写满。
例如用 1 GiB 测试文件做随机 4K 读:
fio --name=randread --filename=fio-test.bin --size=1G --rw=randread --bs=4k --iodepth=32 --numjobs=1 --runtime=30 --time_based --direct=1
随机 4K 写:
fio --name=randwrite --filename=fio-test.bin --size=1G --rw=randwrite --bs=4k --iodepth=32 --numjobs=1 --runtime=30 --time_based --direct=1
顺序读写可把 --rw 改为 read / write,块大小改为 1M 等更适合大块传输的设置。
如何评价结果
不要把不同参数的 fio 结果直接横比。块大小、队列深度、并发数、缓存策略和测试文件大小都会显著改变结果。
正确做法是:
- 固定同一套参数;
- 确保测试文件明显大于缓存影响范围,或使用
direct=1; - 比较相近规格 / 同类磁盘;
- 重复测试观察波动;
- 同时看带宽、IOPS、平均延迟和高分位延迟。
对代理节点的重要性
纯 sing-box / Xray / WireGuard 落地节点通常对磁盘要求很低,因此 fio 在代理场景中优先级低于 IP、线路、CPU 和真实吞吐。
但如果 VPS 同时运行:
- 数据库;
- 日志平台;
- Docker / 容器编排;
- CI 构建;
- 下载 / NAS;
- 监控与历史数据
磁盘性能就会明显影响整体体验。
云 VPS 常见陷阱
缓存导致“虚高”
过小测试文件可能主要命中内存缓存,而不是实际存储。
突发性能
一些云盘允许短时间 burst,刚开始很快,持续写一段时间后速度明显下降。因此需要足够长的测试来观察持续性能。
共享存储超售
同一宿主机上的其他租户也可能影响云盘表现。白天和晚高峰结果波动很大,说明共享资源争用可能比较明显。
安全注意
fio 可以产生很高的磁盘压力。不要随便对生产数据库所在块设备做破坏性测试,也不要直接对裸设备使用写入模式,除非你非常清楚数据会被覆盖。
在普通 VPS 验货中,优先用单独测试文件,而不是直接指定 /dev/vda、/dev/nvme0n1 等块设备。
测试完成后记得删除测试文件:
rm -f fio-test.bin
与其它工具的分工
- YABS:一键综合 CPU / 磁盘 / 网络基准;
- Geekbench:CPU / 计算性能;
- fio:磁盘 I/O;
- iperf3:网络吞吐;
- NetQuality:线路质量;
- VPS 代理节点到手测试与质量评价:完整验货流程。