我希望我的设备使用更少的 CPU 以节省电池。我有一个程序需要大量使用它。nice
不会有帮助,因为它所做的只是在 CPU 处于 %100 时更改调度,而我不希望它达到那么高
答案1
为了让你的CPU使用更少的电池,你需要它运行得更慢。执行程序所需的 CPU 指令总量并不取决于程序运行的速度,因此限制程序使用的 CPU 时间比例将使其使用更多的CPU,不能少。当您的 CPU 没有执行任何操作而不是运行程序时,它仍在消耗电量。最好的情况是,CPU 不执行任何操作的暂停时间足以使其进入省电状态;但即便如此,您也会为额外的电源状态转换付出代价。
限制进程使用的 CPU 时间比例可能会产生间接影响,导致内核切换到较慢的 CPU 时钟速度。是否会发生这种情况取决于选择CPU频率调节器以及涉及的具体数字。默认调控器(ondemand)会发生这种情况,但速度很难控制。
如果你想节省电量,最好的策略是让你的程序使用 100% 的可用 CPU 功率(以便它尽快完成),但将你的 CPU 切换到尽可能慢地运行(因为能量消耗)每条指令的花费随着 CPU 速度的增加而增加)。
/sys/devices/system/cpu/cpu0/cpufreq
您可以通过及其同类参数或使用各种用户界面来配置 CPU 频率。这cpufreq实用程序提供两个命令行工具:cpufreq-info
,cpufreq-set
。有一个更先进的工具套件被称为中央处理器功率现在已包含在内核源代码中。如果您使用 Gnome,则可以使用它的 Cpufreq 小程序。还有其他 GUI。
为了尽可能节省电池电量,请以最低频率运行 CPU。运行cpufreq-info
以显示可用频率。运行cpufreq-set -c 0 -g powersave
以始终以最低频率运行 CPU 0(对于-c
其他 CPU,增加 的值重复)。
答案2
例如,您可以对特定 PID 使用 cpulimit
sudo cpulimit -b -l 80 -p 1183
雷尼斯:
renice +19 1183
第 1183 章
答案3
我不知道是否有一个优雅的解决方案,但您可以使用信号停止并重新启动该过程:
PID=1234
mode=running
run_time=0.1
stop_time=0.1
while true; do
if [ running = "$mode" ]; then
kill -STOP "$PID"
mode=stopped
sleep "$run_time"
else
kill -CONT "$PID"
mode=running
sleep "$stop_time"
fi
done