如何限制进程的CPU使用率?

时间:2016-12-20 09:06:16

标签: linux cpu cpu-usage

我想限制GPU服务器中进程的CPU使用率。我找到了一些方法," nice"或" cpulimit"。但它们并不完全是我想要的。
cpulimit允许一个进程以它想要的速度运行,直到它超过一个百分比,之后它获得一个SIGSTOP,然后是一个sleep和一个SIGCONT。 但我不希望超过百分比的过程入睡。我只希望它不超过一定的百分比。并保持正常运行。

例如,当我运行cpulimit -p 1111 -l 30时,终端将为
[1]+ Stopped
这不是我想要的。

2 个答案:

答案 0 :(得分:3)

如果不为您的程序发送睡眠,我认为这是不可能的。但我不认为你应该担心睡眠,因为这是UNIX在另一个线程请求访问CPU时所做的事情。

如果你发现你的程序正在使用50%的CPU内核,那么 50%的时间,因为CPU内核一次只能执行一个或两个线程(取决于你的配置, lscpu 在linux上查看。)

如果您构建的应用程序始终使用100%的核心并且永远不会让其他进程进入,则可能会这样,但您永远不知道您的内核是否会一次允许某些CPU进入另一个紧急程序。

所以我的建议是考虑你的应用可能会被暂停的事实,因为它可能会发生,这显然是你需要的。

希望我帮助你:)看见你!

答案 1 :(得分:0)

一种可能的方法可能是设计自己的" shell-like"运行另一个进程(或进程组)的程序,并以SIGSTOPSIGCONT信号的形式发送它(有关详细信息,请参阅signal(7))。例如,如果你想让一些程序使用不超过50%的cpu时间,你可以启动它,让它运行10毫秒,发送一个SIGSTOP,睡眠10毫秒,发送一个{ {1}},睡眠10毫秒,发送SIGCONT等等。

这种控制程序的概念验证是我的half.c实用程序(GPLv2 +许可)。顺便说一句,它没有在终端上显示SIGSTOP(shell显示的消息),因为Stopped程序不会自行停止(只有一些进程)。

FWIW,我十多年前开发了这个程序,能够在一些过热的MSI S270笔记本电脑上编译Linux内核

(实际情况稍微复杂一些,而且还涉及太便宜的RAM模块,当加热太多时,工作错误;我需要一年多才能意识到更改RAM模块解决了整体硬件问题问题)。