fio 与 ioping 的延迟

fio 与 ioping 的延迟

有两个测试:

ioping -c 10 -S 4K -D .

9 requests completed in 2.49 ms, 36 KiB read, 3.61 k iops, 14.1 MiB/s
generated 10 requests in 9.00 s, 40 KiB, 1 iops, 4.44 KiB/s
min/avg/max/mdev = 259.5 us / 277.0 us / 325.0 us / 19.9 us
sudo fio --ioengine=libaio --direct=1 --rw=read --bs=4K --numjobs=1 --iodepth=1 --runtime=10 --time_based --name seq_read --filename=/fiotest --size=100m

 read: IOPS=19.8k, BW=77.5MiB/s (81.2MB/s)(775MiB/10001msec)
clat (nsec): min=830, max=11311k, avg=44909.47, stdev=76899.23

两者都使用相同的块大小,但是延迟和 iops 的结果却完全不同。为什么会这样?

答案1

两者都使用相同的块大小,但是延迟和iops的结果却完全不同。为什么会这样?

您可能会比较不同的东西:不同的开销、不同的提交 I/O 的方式等等。

例如:

  • fio 正在按顺序提交 I/O 并请求块 1,然后是块 2 等等。ioping 是这样做的还是一遍又一遍地读取相同的偏移量?
  • fio 正在异步提交 I/O,但我不知道 ioping 是否
  • 它们不是在处理同一个文件(从您发布的内容中我们无法判断它们是否使用相同的文件系统!)
  • fio 在得知上一个 I/O 已完成后立即提交下一个 I/O。由于您省略了完整的 fio 输出,我们无法知道它提交了多少个 I/O,但我猜这十秒钟内提交的 I/O 数量略低于 200000 个。ioping 表示它在 10 秒内生成了 10 个请求。
  • 也许 ioping 的粒度比 fio 差?也许它的开销更大?

TLDR;尝试对不同的工具进行比较通常是行不通的,除非您知道每个工具确实在做同样的事情。尝试坚持将同一工具的结果与其自身进行比较。fio 并不是真正为执行“ping”而设计的,但它在 Linux 上提交 I/O 时效率较高。

相关内容