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

Linux 如何限制进程的CPU使用?,linux,cpu,cpu-usage,Linux,Cpu,Cpu Usage,我想限制GPU服务器中进程的CPU使用。我找到了一些方法,“nice”或“cpulimit”。但它们并不完全是我想要的。 cpulimit允许进程以它想要的速度运行,直到超过一定的百分比,在此百分比之后它将获得SIGSTOP、sleep和SIGCONT。 但我不想让超过一定百分比的过程进入睡眠状态。我只希望不会超过某个百分比。并保持其正常运行。 例如,当我运行cpulimit-p1111-l30时,终端将 [1]+已停止 这不是我想要的。如果不向您的程序发送睡眠,我认为这是不可能的。但我认为您不

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

例如,当我运行
cpulimit-p1111-l30时,终端将
[1]+已停止


这不是我想要的。

如果不向您的程序发送睡眠,我认为这是不可能的。但我认为您不应该担心睡眠问题,因为当另一个线程请求访问CPU时,UNIX就是这样做的

如果您看到您的程序使用了50%的CPU核心,那么这是50%的时间,因为CPU核心一次只能执行一个或两个线程(取决于您的配置,请参阅linux上的lscpu)

如果您正在构建一个应用程序,该应用程序总是消耗100%的内核,并且从不让其他进程进入,那么这是可能的,但您永远不知道您的内核是否会允许某些CPU用于另一个紧急程序

所以我的建议是考虑一下你的应用程序可能会暂停,因为它可能会发生,这是你需要的。
希望我能帮助你:)再见

一种可能的方法是设计您自己的“类似外壳”的程序,运行另一个进程(或进程组),并交替发送
SIGSTOP
SIGCONT
信号(有关更多信息,请参阅)。例如,如果您希望某个程序使用不超过50%的cpu时间,您可以启动它,让它运行10毫秒,发送一个
SIGSTOP
,睡眠10毫秒,发送一个
SIGCONT
,睡眠10毫秒,发送一个
SIGSTOP
等等

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

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


(实际情况稍微复杂一些,还涉及到太便宜的RAM模块,当加热太多时,这些模块工作不正常;我需要一年多的时间才能意识到更换RAM模块解决了整个硬件问题)。

也许这就是我找不到更好解决方案的原因。