从 fio 测试中理解 blktrace

Posted

技术标签:

【中文标题】从 fio 测试中理解 blktrace【英文标题】:understanding blktrace from fio tests 【发布时间】:2020-05-05 13:22:23 【问题描述】:

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

    seqwriete

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

fio output for seqwrite parsed blktrace output for seqwrite

    阅读

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

fio output for randread parsed blktrace output for randread

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

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

【问题讨论】:

【参考方案1】:

(请注意,这并不是一个真正的编程问题,所以 *** 是一个错误的地方问这个问题......也许Super User 或Serverfault 会是更好的选择?)

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

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

为什么 randread 没有 Q2M?

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

【讨论】:

以上是关于从 fio 测试中理解 blktrace的主要内容,如果未能解决你的问题,请参考以下文章

使用 fio 进行 IO 性能测试

为啥 fio 尺寸参数会影响性能的结果

fio工具中的iodepth参数与numjobs参数-对测试结果的影响

用FIO测试存储性能

磁盘测试工具FIO

IO测试工具之fio详解