我已经测试该ionice
命令一段时间了,idle
(3)模式似乎在大多数情况下被忽略。
我的测试是同时运行两个命令:
- 杜
<big folder>
- ionice -c 3 du
<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
进程更快,然后我的系统就会卡住。
有什么建议吗?
参考:
答案1
ionice
仅在使用 CFQ 内核调度程序时才有效。发行版似乎默认使用deadline
调度程序。
查看/sys/block/xvdh/queue/scheduler
您已启用哪个。它是方括号中的那个。
答案2
我认为这是预期的行为 - 至少如果两个进程的 I/O 份额接近 100%。应该有一点不同,但 100% 是极限,如果你已经达到 96%,那么只获得一半的 I/O 就会达到 98%。没什么大不了的。
绝对传输值应该存在明显差异。这种差异也可能取决于 CPU 优先级。
I/O prio 空闲并不意味着系统完全不受影响。如果非空闲进程没有消耗全部可用 I/O,则 prio 空闲进程也会获得 I/O 带宽。因此,可能经常发生非空闲 prio 应用程序需要 I/O 并获得下一个时隙,但由于空闲 prio 进程正在执行 IOP,因此延迟会增加。进程导致的 I/O 越少,空闲 prio 进程对其的影响就越大。因此,降低 cron 进程的 CPU 优先级(甚至可能使其成为 SCHED_IDLE)可能会有所帮助。
但我对交换问题一无所知。