石头盘存储的测试结果和yabs的‘局限性’--附fio脚本

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