Linux 調整 CPU 電源設定檔

前言

之前我才剛將我的 Promox VE 從 Intel I7-4790 換成 AMD 5900X,整個速度提升非常多,真香。但是我發現一件事情,這個 CPU 在運作的時候會一直使用最高頻率。

這其實不是什麼壞事,這可以帶來充足的效能,但是也會造成電力的浪費。所以我就在想,有沒有一個東西是像 Windows 的電源選項可以調整的。

操作步驟

我們可以使用 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 來檢視你的 CPU 預設可以使用哪些設定檔。

# AMD 5900X 的結果
conservative ondemand userspace powersave performance schedutil

每個設定檔都是代表不同的意思,參考 Redhat 的這篇文章,意思大概如下:

performance:強迫 CPU 使用最高頻率運作。
powersave:強迫 CPU 使用最低的頻率運作。
ondemand:視需求,閒置時以最低頻率運作;但當有附載時,直接調到最高。
conservative:與 ondemand 類似,但他會改使用漸進方式調整頻率。
userspace:使用者客製化。

所以我們可以使用 cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 來看看目前 CPU 在哪個設定檔上。

可以看到我的 CPU 正在使用 performance,意味著一直運作在最高頻率。(他會列出所有核心,但篇幅關係我刪減了。)

root@pve1:~# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance

我這邊想用 conservative,所以可以使用以下命令來更改。

echo "conservative" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

之後可以使用 watch -n 1 "cat /proc/cpuinfo | grep MHz" 來查看當前的時脈,每秒更新一次。

Every 1.0s: cat /proc/cpuinfo | grep MHz

cpu MHz         : 2199.403
cpu MHz         : 2199.668
cpu MHz         : 2199.066
cpu MHz         : 2194.734
cpu MHz         : 2197.826
cpu MHz         : 2200.000
cpu MHz         : 2198.713
cpu MHz         : 2199.530
cpu MHz         : 2197.944
cpu MHz         : 2199.480
cpu MHz         : 2198.918
cpu MHz         : 2199.376
cpu MHz         : 2198.299
cpu MHz         : 2199.550
cpu MHz         : 2198.969
cpu MHz         : 2199.415
cpu MHz         : 2198.400
cpu MHz         : 2199.202
cpu MHz         : 2199.135
cpu MHz         : 2198.836
cpu MHz         : 2200.000
cpu MHz         : 2198.339
cpu MHz         : 2199.550
cpu MHz         : 2198.912