如何测试 RackNerd VPS 的真实读写速度避免缓存干扰

文章导读
测试 RackNerd VPS 真实读写速度最推荐直接使用 fio 工具并开启 direct=1 参数,适用于需要评估磁盘真实性能的场景,风险在于高负载 IO 可能暂时影响业务响应。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

测试 RackNerd VPS 真实读写速度最推荐直接使用 fio 工具并开启 direct=1 参数,适用于需要评估磁盘真实性能的场景,风险在于高负载 IO 可能暂时影响业务响应。

先说结论:Linux 默认会利用空闲内存缓存磁盘数据,导致普通 dd 测试虚高,必须绕过缓存层才能看到物理磁盘极限。

  • 先定位:确认 VPS 架构是否为 KVM,OpenVZ 容器无法准确测试独立磁盘 IO。
  • 先做:使用 fio 工具配置 direct=1 参数或直接使用 dd 配合 oflag=direct 标志。
  • 再验证:对比多次测试结果,观察 IOPS 和带宽数值是否稳定。

命令速用版

以下命令可直接在 SSH 终端执行,无需安装额外脚本即可完成基础测试。

dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
fio -name=write_test -ioengine=libaio -iodepth=1 -rw=write -bs=1M -direct=1 -size=1G -numjobs=1 -runtime=60 -group_reporting

为什么会这样

Linux 系统默认开启 Page Cache 机制,会将写入数据先存到内存再异步刷入磁盘。

普通测试命令只测量了写入内存的速度,而非磁盘物理写入速度。RackNerd 等提供商的 VPS 通常基于 KVM 虚拟化,宿主机负载波动也会影响最终 IO 表现,绕过缓存能排除内存速度干扰。

分步处理

第一步:检查虚拟化类型。使用 systemd-detect-virt 命令,确认输出为 kvm 而非 openvz 或 lxc。

如何测试 RackNerd VPS 的真实读写速度避免缓存干扰

第二步:安装测试工具。CentOS 使用 yum install fio,Ubuntu 使用 apt install fio。

第三步:执行写入测试。运行上述 fio 命令,确保 direct=1 参数存在。

第四步:执行读取测试。将 rw 参数改为 read,再次运行 fio 命令。

怎么验证是否生效

查看 fio 输出中的 bw 字段,单位通常是 KiB/s 或 MiB/s。

如果使用了 direct=1 且数值远低于内存带宽(通常小于 500MB/s 对于 HDD 或普通 SSD),说明测试已绕过缓存。

如何测试 RackNerd VPS 的真实读写速度避免缓存干扰

检查 /proc/meminfo 中的 Cached 值,测试期间该数值不应大幅波动。

常见坑

不要在业务高峰期测试,高 IO 负载可能导致 VPS 被宿主机限制。

避免测试文件过小,小于内存大小的文件容易被完全缓存。

不要频繁执行 drop_caches 命令,这会导致生产环境业务瞬间变慢。

如何测试 RackNerd VPS 的真实读写速度避免缓存干扰

常见问题

dd 和 fio 哪个结果更准?

fio 结果更准,因为它能模拟随机读写和并发队列深度,dd 仅适合顺序写入粗测。

测试会影响 VPS 数据安全吗?

只读测试不影响数据,写入测试会生成临时文件,测试完成后删除即可。

为什么每次测试结果不一样?

宿主机邻居噪声和磁盘物理特性会导致波动,建议取三次测试的平均值。

参考来源

fio 官方文档 - Flexible I/O Tester https://github.com/axboe/fio

Linux Kernel Documentation - Page Cache https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.html