从 fio 测试中理解 blktrace

问题描述 投票:0回答:1

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

  1. 序列写入

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

fio output for seqwrite parsed blktrace output for seqwrite

  1. 兰德阅读

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

fio output for randread parsed blktrace output for randread

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

  1. 为什么 randread 有很大一部分 I2D 而 seqwrite 没有?
  2. 为什么randread没有Q2M?
io performance-testing qemu ceph blktrace
1个回答
0
投票

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

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

为什么randread没有Q2M?

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

© www.soinside.com 2019 - 2024. All rights reserved.