从 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的主要内容,如果未能解决你的问题,请参考以下文章