我可以阻止命名应用程序更改 CPU 的频率吗?

我可以阻止命名应用程序更改 CPU 的频率吗?

我有一台 Intel 服务器。使用 p_state 驱动程序,CPU 在 800MHz 和 3GHz 之间进行电源管理。显然,当 CPU 频率降至 800Mhz 时,功耗更低,噪音更小。

服务器上运行的大多数程序都是按需运行的,应该尽可能快地执行(它们确实如此),但我有一个守护进程完全不重要。它在峰值时占用大约 20% 的 CPU,但在处理文件时可以持续几个小时。

我的问题是,每当此进程执行任何操作时,CPU 中的电源状态都会上升。它会消耗更多电量并产生更多噪音。我希望这个守护进程始终以 800MHz 运行(除非其他任务需要 CPU)。

我可以将整个服务器置于省电模式,但我需要其他应用程序来扩展 CPU。有没有一种合理的方法可以让我告诉管理 CPU 的程序忽略特定应用程序的负载?

答案1

我发现cpulimit

$ sudo apt-get install cpulimit  # for installing cpulimit
$ pgrep process_to_limit         # getting the pid
1234

$ cpulimit -p 1234 -l 30         # -p pid -l percentage_of_cpu_to_use

但它似乎cpulimit只使用正在运行的进程的 pid 或执行程序。这意味着您需要找到一种方法(bash 脚本)在守护进程运行时执行 cpulimit。

这是一个简短的 shell 脚本,它读取 pid、执行 cpulimit 并休眠 60 分钟。

#!/bin/sh
# This example uses firefox, replace the variable PROG

PROG=firefox
PID=`pgrep $PROG`

if [ $PID ]                # if $PID not equals 0 (zero)
then
   cpulimit -p $PID -l 30  # limit the cpu time to 30%
   sleep 60m               # wait 60 minutes
else
   sleep 60m
fi

将其保存为例如run_cpulimit.sh,授予权限chmod u+x run_cpulimit.sh并启动它。

相关内容