大家
最近,我用fio做了一些测试来测试我的磁盘性能。我将fio配置为使用直接io和O_SYNC,以下是我的配置
[global]
invalidate=0 # mandatory
direct=1
sync=1
thread=1
norandommap=1
runtime=10000
time_based=1
[write4k-rand]
stonewall
group_reporting
bs=4k
size=1g
rw=randwrite
numjobs=1
iodepth=1
但是,当我在fio运行时通过iostat监视磁盘性能时,我看到了以下输出。
avg-cpu: %user %nice %system %iowait %steal %idle
0.12 0.00 0.08 3.81 0.00 95.98
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 39.50 0.00 176.00 0.00 1648.00 9.36 1.02 5.81 5.65 99.50
wrqm / s是39.50。如果停止fio,则wrqm / s为0.当我用O_SYNC进行直接io时,为什么还有io合并?请帮帮我。
谢谢: - )
答案 0 :(得分:0)
在Linux上,进行直接I / O并不意味着“做这个精确的I / O” - 它意味着绕过Linux的页面缓存。在撰写本文时,open man page说明了O_DIRECT
:
尝试最小化I / O与此文件之间的缓存效果。
这意味着像Linux I / O调度程序这样的东西仍然可以自由地做关于合并,重新排序(你使用fio的sync=1
是什么停止重新排序)和O_DIRECT
我/ O。
请参阅https://www.kernel.org/doc/Documentation/block/queue-sysfs.txt中nomerges
的不同参数,了解如何教导调度程序以避免合并/重新排列,但请注意,您无法控制过大请求的拆分。