了解renice

我试图用renice 19 (Linux 3.11)给一个CPU绑定的应用程序调度最低的优先级。 但是,它似乎没有按预期工作,或者我有一个理解问题。

让我来描述两种我已经尝试过的方法。 我期望在两个方面我都会得到同样的结果,但是我没有。 考虑应用程序loop是一个繁忙的循环: int main() { for(;;) ; return 0; } int main() { for(;;) ; return 0; } int main() { for(;;) ; return 0; }

实验1

  • 开了一个terminal
  • 运行./loop & CPU一样多(例如,我有4个CPU)。
  • 跑了一个loop实例,并将其重新命名为19

结果如预期。 非reniced loop实例几乎100%CPU,每个实例有约1%。

实验2

  • 开了两个terminal
  • terminal1:运行./loop & CPU一样多。
  • 2号航站楼:再次运行一个loop并将其重新设置为19

结果并不如预期。 在terminal2启动的loop实例有100%(虽然有19),而terminal1的loop实例共享其余的资源。

为什么实验2的行为不如实验1?

Solutions Collecting From Web of "了解renice"

您可能已启用自动组。

在这种情况下,在最高级别的实验2中,有两个控制组(每个会话一个)竞争CPU,并且在每个控制组内进程竞争CPU。

你可以看到当前的控制组和它的漂亮:

 cat /proc/$$/autogroup 

你可以用下面的方法来设置好:

 echo 19 > /proc/$$/autogroup