我正在尝试构建一个实验来测量ionice的效果.我想做的是(每
another answer on serverfault)导致足够频繁的I / O,使得任何I / O都缺乏充分的“niced”过程.
基于another answer on serverfault,我认为我需要每250ms对一个常见的cfq预定设备进行至少一次实际的I / O操作.我的想法是写一个有一个循环的琐碎程序
>写入公共设备上的(可配置)文件,
>执行fsync()(强制执行明确的I / O操作),
>使用usleep()延迟可配置的时间
>定期使用lseek()来截断文件(这样我就不会填充文件系统)
然后,我使用ionice -c3(空闲调度类)对公共设备上的一个文件启动一个程序实例.我同时使用默认(尽力而为)调度类运行各种实例,在公共设备上指定不同的文件(改变延迟值).
我的假设是,对于“尽力而为”过程的250ms或更长的延迟值,我会看到“空闲”过程所取得的进展;对于小于250毫秒的值,我会看到“空闲”过程几乎没有取得任何进展.
我的观察是两个过程的表现没有差别;他们都取得了类似的进展.只是为了确定(如果挂钟指示“尽力而为”过程执行I / O的速度比每250毫秒快得多),我启动了多个“尽力而为”过程的同时实例,指定否(零)延迟.尽管如此,我发现两个调度类中的进程之间的性能没有差异.
只是为了确定,我重新检查了调度程序类:
$cat /sys/block/xvda/queue/scheduler noop anticipatory deadline [cfq]
我错过了关于cfq调度程序如何工作的内容是什么?
如果重要,那就是2.6.18内核.