我有一个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相差很大?
答案 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>
direct=1
,ioengine=libaio
,然后设置{{ 1}}设置为适当的值(例如,对于无聊的直接连接的SATA磁盘,我将使用direct=1
)。iodepth
工具无法执行iodepth=32
可以做的所有事情-目的是非常简单的。以上更改并不意味着工具的编号相同(例如,工具的随机数生成器不同),但是您应该注意到更改...
(NBB:您没有提供您使用的是哪个版本的Fio或使用的环境-您是否看到了https://github.com/axboe/fio/blob/master/REPORTING-BUGS中要求的信息?)