在选择 VPS 时,除了 CPU、内存和网络带宽,磁盘性能也是影响服务器运行效率的重要因素。对于运行 WordPress、数据库、网站程序或其他应用的用户来说,磁盘读写速度、每秒读写操作次数以及 I/O 延迟,都可能影响实际使用体验。
我们今天就来介绍下怎么用 FIO 来对磁盘性能进行测试。
FIO 是什么?
FIO(Flexible I/O Tester)是一款用于测试存储设备 I/O 性能的工具,支持 Linux 等多种操作系统。它可以通过设置读写比例、数据块大小、并发任务数和测试时长,模拟不同的磁盘访问场景。
与只关注连续读写速度的简单测速工具不同,FIO 不仅可以测试磁盘的顺序读写性能,还能测试随机读写、IOPS 和 I/O 延迟。这些指标有助于从不同角度评估 VPS 的存储性能。
例如,顺序读写测试适合观察大文件传输时的吞吐能力;随机读写测试则更适合分析数据库、网站缓存等涉及大量小块数据访问的场景。不过,FIO 的测试结果会受到测试参数、虚拟化方式、底层存储设备和服务器负载等因素影响,因此不同测试条件下的数据不能直接进行简单比较。
如果你还想测试除了磁盘性能之外的性能,可以选择其他测试脚本。
如何使用 FIO 测试 VPS 磁盘性能和解读结果
我们现在在一台 VMRack 的 VPS 上安装 FIO,看看它的磁盘性能怎么样。通过随机读写和顺序读写两组测试,可以分别观察磁盘处理小块 I/O 请求的能力,以及连续读写大文件时的吞吐表现。
安装 FIO 并检查磁盘空间
以 Ubuntu 或 Debian 系统为例,通过 SSH 登录 VPS 后,执行以下命令安装 FIO:
apt update && apt install fio -y
安装完成后,查看版本号:
fio --version
接下来,检查磁盘容量和文件系统:
df -hT /
df -hT /tmp
本次测试环境的根目录和 /tmp 均挂载在 /dev/vda1 上,文件系统为 ext4,磁盘容量约为 48 GB,已使用约 17 GB,剩余约 31 GB。因此,可以在 /root 目录下创建专用测试文件。
需要注意,测试位置应当确实位于要检查的磁盘上。如果目录使用的是 tmpfs 等内存文件系统,测试结果就不能直接代表实际磁盘性能。
测试 4K 随机读写性能
随机读写测试会以非连续的方式访问数据,适合观察磁盘处理小块 I/O 请求时的表现。对于数据库、网站程序等存在较多小块读写操作的应用,这类指标具有一定参考价值。
执行以下命令:
fio --name=disk-test \
--filename=/root/fio-test \
--size=1G \
--rw=randrw \
--rwmixread=70 \
--bs=4k \
--direct=1 \
--ioengine=libaio \
--iodepth=1 \
--numjobs=1 \
--runtime=30 \
--time_based \
--group_reporting
这条命令会使用 1 GiB 的测试文件,以 4 KiB 为数据块大小,进行持续约 30 秒的随机混合读写测试。其中,--rwmixread=70 表示读取请求比例设为 70%,写入请求比例设为 30%;--iodepth=1 和 --numjobs=1 则表示使用单个任务和较低队列深度。
本次测试得到以下结果:
这些数据反映了当前 VPS 在指定参数下的随机读写表现。由于测试使用的是 4 KiB 小数据块,带宽相对较低并不意外,不能直接拿它与大文件顺序读写的速度比较。
测试磁盘顺序读写速度
随机读写之外,还可以使用 FIO 测试连续读写大文件时的性能。顺序读写更适合观察大文件传输、备份和文件复制等场景下的吞吐能力。
本次测试将数据块大小调整为 1 MiB,分别进行顺序读取和顺序写入。
顺序读取命令:
fio --name=seqread \
--filename=/root/fio-test \
--size=1G \
--rw=read \
--bs=1M \
--direct=1 \
--ioengine=libaio \
--iodepth=1 \
--numjobs=1 \
--runtime=30 \
--time_based \
--group_reporting
实测结果如下:
顺序写入命令:
fio --name=seqwrite \
--filename=/root/fio-test \
--size=1G \
--rw=write \
--bs=1M \
--direct=1 \
--ioengine=libaio \
--iodepth=1 \
--numjobs=1 \
--runtime=30 \
--time_based \
--group_reporting
实测结果如下:
从本次结果来看,顺序读取带宽约为 456 MiB/s,顺序写入带宽约为 464 MiB/s,两者比较接近。这代表该 VPS 在当前测试参数下具有这样的连续读写吞吐表现,但不能据此推断所有业务负载下都能达到相同速度。
要看懂这个结果,主要看 IOPS、BW 和 Latency 这 3 个指标。
IOPS:每秒输入输出操作次数
IOPS 是 Input/Output Operations Per Second 的缩写,表示每秒完成的 I/O 操作次数。通常情况下,在数据块大小和其他测试条件相同的前提下,IOPS 越高,说明存储系统处理小块读写请求的能力越强。
本次 4K 随机测试的读取 IOPS 约为 1,750,写入 IOPS 约为 750。顺序读写测试的 IOPS 则分别约为 456 和 464。由于两组测试使用的数据块大小不同,不能只比较 IOPS 数字来判断哪一种模式下的磁盘性能更好。
BW:磁盘读写带宽
BW 是 Bandwidth 的缩写,表示单位时间内完成的数据传输量。随机测试中的读取带宽约为 7,001 KiB/s,顺序读取带宽则约为 456 MiB/s。
两者差异主要与数据块大小和访问模式有关。4K 随机测试侧重小块 I/O 请求,而 1M 顺序测试更侧重连续数据传输,因此应当在相同测试条件下比较带宽,而不是直接比较两种模式的数字。
Latency:I/O 延迟
延迟表示 I/O 请求从提交到完成所经历的时间。FIO 输出中的 lat 是总延迟,clat 是完成延迟。平均延迟可以帮助了解整体表现,而 P99 延迟则用于观察较慢请求的情况。
例如,本次顺序读取的平均总延迟约为 2.19 ms,P99 完成延迟约为 25.56 ms;顺序写入的平均总延迟约为 2.15 ms,P99 完成延迟约为 42.21 ms。这说明平均值并不能反映每一次请求的耗时,少量较慢的请求也会影响实际应用体验。
FIO 测试 VPS 磁盘性能需要注意什么?
1. 不要只看一次测试结果
VPS 的测试成绩可能受到宿主机负载和底层存储状态影响。建议在相近条件下多测几次,避免仅凭一次结果判断磁盘性能。
2. 测试文件大小要合理
测试文件太小可能无法充分反映持续读写性能,太大则会占用较多磁盘空间。普通 VPS 用户可以先使用 1 GiB 测试文件,再根据实际情况调整。
3. 避开业务高峰期
FIO 会增加磁盘 I/O 负载,可能影响网站、数据库等服务。生产环境建议在业务低峰期测试,并避免随意提高并发数和测试时长。
4. 测试结果不等于真实业务表现
FIO 反映的是特定参数下的磁盘性能。网站实际运行速度还会受到 CPU、内存、网络和程序效率等因素影响,因此需要结合其他指标综合判断。
总结
FIO 是一款功能灵活的磁盘 I/O 测试工具,可以帮助 VPS 用户测试顺序读写、随机读写、IOPS 和延迟等关键指标。通过统一测试参数,用户可以对不同服务器的存储性能进行更有参考价值的比较。
在实际选购 VPS 时,如果主要运行网站或数据库,建议除了关注顺序读写速度,也要留意 4K 随机读写能力和 I/O 延迟。同时,应结合 CPU、内存、网络表现及实际应用需求综合判断,避免只依据单一测试数据作出决定。





文章评论