fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/vda1):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 1.10 MB/s (275) | 21.95 MB/s (343)
Write | 1.13 MB/s (283) | 22.41 MB/s (350)
Total | 2.23 MB/s (558) | 44.37 MB/s (693)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 85.26 MB/s (166) | 100.89 MB/s (98)
Write | 89.79 MB/s (175) | 107.61 MB/s (105)
Total | 175.05 MB/s (341) | 208.50 MB/s (203)
YABS 只展示了平均值(Average),而手动测试揭露了致命伤:max latency (最大延迟)。
- 平均速度 1MB/s:备份 32GB 需要约 9 小时。
- 1.4 秒的延迟毛刺:这是最要命的。即便平均 IOPS 提高了,只要这种“断片”现象存在,你的 NFS 协议在传输大文件时依然会因为等不到响应而触发
RPC fragment too large报错。
详细fio脚本的测试:
1. 终极数值:clat 中的 max
在 rand_write(随机写入)部分的这一行:
clat (usec): min=114, **max=1448.0k**, avg=5799.89
clat:指的是“完成延迟”(Completion Latency),即从下达指令到磁盘回复“写好了”的时间。max=1448.0k:这是最直接的证据。单位是微秒(usec),换算过来就是 1.448 秒。- 这意味着:在测试期间,有一个写入请求让 CPU 足足等了近 1.5 秒。在计算机的世界里,这相当于心脏停跳了一次。
2. 概率分布:clat percentiles
这一部分展示了延迟的分布情况:
| 99.99th=[**1044382**]
- 意思:在所有的写入操作中,最后 0.01% 的操作,延迟都超过了 1,044,382 微秒(约 1.04 秒)。
- 分析:如果磁盘性能稳定,这个 99.99th 的数值应该和平均值(avg)比较接近(比如几十毫秒)。但在你这里,它比平均值(5ms)高出了 200 倍。
3. 时间区间统计:lat (msec)
在截图接近底部的位置:
lat (msec) : **1000=0.12%**, **2000=0.04%**
- 这行数据告诉你,有 0.12% 的请求耗时在 1 秒左右,甚至有 0.04% 的请求接近 2 秒。
- 别小看这 0.04%,一旦你的备份任务涉及几万个碎文件写入,这种“1-2秒的卡顿”会像多米诺骨牌一样堆积,最终导致网络连接(NFS)因为等太久而报错。
fio测试脚本:
cat << 'EOF' > disk_bench_v2.sh
#!/bin/bash
# 请确保这个路径指向你的 HDD 挂载目录下的一个文件
TEST_FILE="/mnt/test_fio_file"
TEST_SIZE="2G"
echo "--- 开始行业标准磁盘性能测试 (修正版) ---"
# 1. 顺序写入测试 (测带宽)
echo ">> [1/2] 正在测试顺序写入 (Sequential Write)..."
fio --name=seq_write \
--filename=$TEST_FILE \
--rw=write --bs=1M --direct=1 \
--ioengine=libaio --iodepth=32 \
--size=$TEST_SIZE \
--runtime=60 --time_based --group_reporting
# 2. 随机写入测试 (测 IOPS 和 延迟)
echo -e "\n>> [2/2] 正在测试随机 4K 写入 (Random Write)..."
fio --name=rand_write \
--filename=$TEST_FILE \
--rw=randwrite --bs=4k --direct=1 \
--ioengine=libaio --iodepth=1 \
--size=$TEST_SIZE \
--runtime=60 --time_based --group_reporting
# 清理测试文件
rm -f $TEST_FILE
echo -e "\n--- 测试完成 ---"
EOF
chmod +x disk_bench_v2.sh
./disk_bench_v2.sh
