我已经测试ionice
命令一段时间了,idle
在大多数情况下似乎忽略了(3) 模式。
我的测试是同时运行这两个命令:
<big folder>
<another big folder>
如果我检查两个进程,iotop
我看不到每个进程的 io 利用率百分比有什么不同。
为了提供有关 CFQ 调度程序的更多信息,我使用的是 3.5.0 linux 内核。
我开始做这个测试是因为每次updatedb.mlocate
在我的 Ubuntu 12.10 机器上执行每日 cron 作业时我都在试验系统延迟。
如果您检查该/etc/cron.daily/mlocate
文件,您会发现该命令的执行方式如下:
/usr/bin/ionice -c3 /usr/bin/updatedb.mlocate
此外,有趣的是,每当我的系统出于某种原因开始使用交换内存时,updatedb.mlocate
io 进程的调度速度比kswapd0
进程快,然后我的系统就会卡住。
一些建议?
参考:
小智 5
ionice
仅当您使用 CFQ 内核调度程序时才有效。发行版似乎默认为deadline
调度程序。
查看/sys/block/xvdh/queue/scheduler
您已启用哪些。就是方括号里的那个。
我认为这是预期的行为 - 至少如果两个进程的 I/O 共享接近 100% 的话。应该有很小的差异,但 100% 是极限,如果您已经达到 96%,那么只能得到 98% 中 I/O 结果的一半。没什么大不了。
绝对转移值中应该可以辨别出严重的差异。这种差异也可能取决于 CPU 优先级。
I/O prioidle并不意味着系统完全不受影响。如果非空闲进程不消耗全部可用 I/O,则优先空闲进程也会获得 I/O 带宽。因此,可能经常发生这样的情况:非空闲 prio 应用程序需要 I/O 并且确实获得了下一个槽,但由于空闲 prio 进程正在执行 IOP,因此延迟会增加。进程引起的 I/O 越少,空闲优先级进程对其的影响就越大。因此,它可能有助于降低 cron 进程的 CPU 优先级(甚至可能使其成为 SCHED_IDLE)。
不过我不知道交换问题。