如何testingionice(针对使用cfq调度程序的设备)的影响?

我正在尝试构build一个实验来测量ionice的效果。 我想做的是( 在serverfault上的另一个答案 )导致足够频繁的I / O,足够的“nice”进程饿死任何I / O。

基于serverfault上的另一个答案 ,我认为我需要每250毫秒至less一个实际的I / O操作到一个通用的CFQ预定的设备。 我的想法是写一个有一个循环的小程序

  • 写入普通设备上的(可configuration)文件,
  • 做一个fsync() (强制一个确定的I / O操作),
  • 使用usleep()来延迟可configuration的时间量
  • 定期使用lseek()截断文件(这样我就不会填充文件系统)

然后,我使用ionice -c3空闲调度类)针对普通设备上的一个文件启动程序的一个实例。 我同时使用默认( 尽力而为 )调度类运行各种实例,在通用设备上指定不同的文件(改变延迟值)。

我的假设是,在“尽力而为”的过程中,对于250ms或更长的延迟值,我将看到“闲置”过程取得的进展; 对于小于250毫秒的值,我会看到“闲置”过程所取得的进展甚微。

我的观察是这两个过程的performance没有差别, 他们都取得了相似的进展。 可以肯定的是(如果挂钟指示“尽力而为”的进程比每250ms执行I / O的速度快),我开始同时执行“尽力而为”进程的多个实例,延迟。 不过,我看到两个调度类中的进程在性能上没有差别。

可以肯定的是,我重新检查了调度程序类:

 $ cat /sys/block/xvda/queue/scheduler noop anticipatory deadline [cfq] 

我错过了关于cfq调度器的工作原理的是什么?

如果重要的话,这是2.6.18内核。

我会尝试使用load stress -instress -dn等负载生成器来测量效果,其中“n”是进程的数量。 在一个窗口中运行。 尝试在另一个nmoniostat ,并尝试在同一个块设备上的代表性的应用程序进程。 了解如何使用各种ionice设置在iostat更改服务时间(或从您的应用程序中testing响应)。

至于cfq,整个RHEL5生命周期(2.6.18)似乎都有变化。 在我的应用程序服务器上,足够引人注意的是,由于争用问题,我必须转移到noopdeadline电梯。