菲奥替补席结果不同的IOPS?

时间:2019-02-20 13:04:51

标签: disk random-seed

我有一个7200rate的硬盘,只是想测试它的随机读取性能

tools1:https://github.com/cxcv/iops

./iops --time 20 --num-threads 1 --block-size 4096 --pattern random /dev/sdf

output1:

  /dev/sdf,   9.80 T, sectorsize=4096B, #threads=1, pattern=random:
  4 kB blocks:   82.0 IO/s, 335.8 kB/s (  2.7 Mbit/s)

tools2:fio

    fio -name iops -rw=randread -bs=4k -runtime=20 -iodepth 1 -filename /dev/sdf -ioengine libaio -direct=1

output2:

    Jobs: 1 (f=1): [r(1)][100.0%][r=1001KiB/s,w=0KiB/s][r=250,w=0 IOPS][eta 00m:00s]

为什么output1 82和output2 250中的iops相差很大?

1 个答案:

答案 0 :(得分:0)

(注意:Stackoverflow并非真正适合非编程问题的地方。也许您打算将其提交到Server Fault上吗?)

  

为什么output1 82和output2 250的iops相差很大?

因为您使用了两种具有不同配置的工具,所以最终进行了不同的比较(使用iops的缓存I / O与使用fio的深度为1的未缓存I / O)。

浏览iops工具的代码表明它正在通过缓冲区高速缓存提交I / O(Python代码中没有提到O_DIRECT)。您的fio命令明确避免通过缓冲区高速缓存(direct=1提交,并且您明确要求仅提交一个I / O,并等到它回来后再提交下一个I / O({{1 }}。

一般来说:

  • 如果您只是希望iodepth 1的行为更像fio工具,那么最好使用iops I / O引擎,而不要使用psync。 / li>
  • 如果您要开始测量Linux上的限制而又避免缓冲效果(可能会严重扭曲相同数据的重读),则通常需要使用direct=1ioengine=libaio,然后设置{{ 1}}设置为适当的值(例如,对于无聊的直接连接的SATA磁盘,我将使用direct=1)。
  • iodepth工具无法执行iodepth=32可以做的所有事情-目的是非常简单的。

以上更改并不意味着工具的编号相同(例如,工具的随机数生成器不同),但是您应该注意到更改...

(NBB:您没有提供您使用的是哪个版本的Fio或使用的环境-您是否看到了https://github.com/axboe/fio/blob/master/REPORTING-BUGS中要求的信息?)