我正在尝试构建一个实验来测量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内核.
解决方法
我尝试使用负载生成器(如stress -i n或stress -d n)来测量效果,其中“n”是进程数.在一个窗口中运行它.在另一个中尝试nmon或iostat,并在同一块设备上尝试代表性的应用程序进程.通过各种电离设置(或应用程序内的测试响应)了解iostat中的服务时间如何变化.
至于cfq,整个RHEL5生命周期似乎都有变化(2.6.18).在我的应用程序服务器上,由于争用问题我不得不转移到noop和截止日期的电梯,这是显而易见的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。