我希望我的設備使用更少的 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