从Fio测试中了解blktrace

我购买了一个虚拟服务器,该服务器具有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 --iodepth = 64 --numjobs = 8 --direct = 1-运行时= 960 --name = seqwrite --group_reporting

fio output for seqwrite parsed blktrace output for seqwrite

  1. randread

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

fio output for randread parsed blktrace output for randread

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

  1. 为什么randread拥有大量I2D,而seqwrite没有?
  2. 为什么randread没有Q2M?
lijinhui555 回答:从Fio测试中了解blktrace

(请注意,这实际上不是编程问题,所以Stackoverflow是问这个问题的错误位置……也许是Super UserServerfault会是更好的选择?)

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

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

为什么randread没有Q2M?

由于经常不连续,很难将随机I / O与现有的排队I / O合并!

本文链接:https://www.f2er.com/2745557.html

大家都在问