ionice 空闲被忽略

ionice 空闲被忽略

我已经测试该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.mlocateio 进程的调度速度就会比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)可能会有所帮助。

但我对交换问题一无所知。

相关内容