我一直在摆弄电源管理,但找不到一种方法来使我想要的更改持久化。例如,我使用以下命令设置了最大 cpu 频率:
sudo cpupower frequency-set --max 2GHz
但每次重新启动时该值都会恢复为原始值。是否有一种标准方法可以使这种更改持久存在?我已经阅读过有关内核模块的内容,但我不知道它们是如何工作的......任何人都可以帮助我吗?
笔记。我的机器运行的是 Ubuntu 20.04。
答案1
这有关 CPU 频率缩放的 Arch Wiki 页面建议采用几种不同的方法来cpupower
持久执行更改。
- 正如您提到的,其中之一是添加内核模块。但还有其他更简单的选项应该更容易。更简单的方法是启用
cpufreq
的systemd
服务,如 Arch Wiki 中建议的那样。赶紧跑
sudo systemctl enable cpupower
每次启动机器时都会启动该服务。我现在没有在机器上运行systemd
,所以我无法执行任何测试。
- 第二个选项是添加
udev
规则。我现在已经测试过这个,效果非常好。只需编辑名为或类似的文件/etc/udev/rules.d/50-scaling-governor.rules
(如果不存在则创建它)并向其中添加以下内容:
SUBSYSTEM=="module", ACTION=="add", KERNEL=="acpi_cpufreq", RUN+="/bin/sh -c 'echo 2000000 | tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq'"
这会将 CPU0 的最大频率更改为写入的值。在您的情况下,2000000
或 2.0 GHz。要对计算机中的每个 CPU 执行相同的操作,只需将前面的命令更改为
SUBSYSTEM=="module", ACTION=="add", KERNEL=="acpi_cpufreq", RUN+="/bin/sh -c 'echo 2000000 | tee /sys/devices/system/cpu/cpu*[0-9]/cpufreq/scaling_max_freq'"
这将改变系统中每个 CPU 的最大频率。
答案2
# cat<<EOF > /etc/systemd/system/cpupower.service
[Unit]
Description=CPU powersave
[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower -c all frequency-set --governor powersave -d 400MHz -u 1000MHz
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemcl enable cpupower