0

我购买了具有 8 个 vCPU、16G 内存和 500G ssd 卷(由 ceph rbd 支持)的虚拟服务器。然后我用fio来测试服务器的IO性能。为了更好的理解fio结果,在测试的过程中,我也使用了blktrace来捕获block layer IO trace。

  1. 顺序写

    fio --filename=/dev/vdc --ioengine=libaio --bs=4k --rw=write --size=8G --iodepth=64 --numjobs=8 --direct=1 --runtime=960 - -name=seqwrite --group_reporting

seqwrite 的 fio 输出 seqwrite 的 解析 blktrace 输出

  1. 朗读

    fio --filename=/dev/vdc --ioengine=libaio --bs=4k --rw=randread --size=8G --iodepth=64 --numjobs=8 --direct=1 --runtime=960 - -name=randread --group_reporting

randread 的 fio 输出 randread 的 解析 blktrace 输出

我想了解的是 seqwrite 和 randread 在块层的区别。

  1. 为什么 randread 有很大一部分 I2D 而 seqwrite 没有?
  2. 为什么randread没有Q2M?
4

1 回答 1

0

(注意这不是一个真正的编程问题,所以 Stackoverflow 是问这个问题的错误地方......也许超级用户Serverfault会是更好的选择?)

为什么 randread 有很大一部分 I2D 而 seqwrite 没有?

您是否意识到您的 8 个 numjobs 中的每一个都覆盖了与其他 numjobs 相同的区域?这意味着如果同一区域的覆盖足够接近(这在顺序情况下很可能),则块层可能能够丢弃后续请求......

为什么randread没有Q2M?

很难将随机 I/O 与现有的排队 I/O 合并,因为它通常是不连续的!

于 2020-01-27T08:40:06.743 回答