cpufreq - Linux内核CPU 频率调节

cpufreq 是 Linux 内核提供的 CPU 频率调节工具和接口,允许用户和系统动态调节处理器的频率(时钟速度)来优化性能与电源消耗之间的平衡。通过 cpufreq,你可以在高性能模式和节能模式之间进行切换,从而减少电池消耗或提高处理器的性能。

cpufreq 的主要功能

cpufreq 通过内核模块实现,允许用户调整 CPU 频率。其基本功能包括:

  • 调节 CPU 频率:根据当前系统负载,动态调整 CPU 的频率以节省能量或提升性能。
  • 节能模式:在不需要全速处理器的情况下降低频率,减少功耗,延长电池寿命。
  • 性能模式:在需要高性能时提升 CPU 频率,提供更好的计算能力。
  • 多种频率调节器(governors):可以根据使用场景选择不同的调节策略。

cpufreq 的工作原理

cpufreq 主要通过 CPU 核心频率和电压的动态调整来控制电源管理。其核心工作机制是:

  1. CPU 频率与电压的调整:当 CPU 工作负荷较轻时,cpufreq 会降低 CPU 频率和电压,减少功耗。当负荷较重时,提升 CPU 频率和电压以提高处理能力。
  2. 动态频率切换cpufreq 可以在不同频率和电压级别之间自动切换,这一过程称为 DVFS(动态电压和频率调节)。

关键组件

  1. cpufreq 内核模块:这些模块直接与 CPU 驱动程序交互,控制 CPU 的频率。
    • cpufreq_userspace:允许用户手动设置 CPU 频率。
    • cpufreq_ondemand:根据系统负载自动调整 CPU 频率。
    • cpufreq_conservative:像 ondemand 一样工作,但调整频率更为渐进。
    • cpufreq_powersave:将 CPU 频率设置为最低以节省能源。
    • cpufreq_performance:将 CPU 频率固定在最高,提供最佳性能。
  2. Governor(调频策略):这些策略决定如何动态调节 CPU 频率。不同的 Governor 适合不同的使用场景,以下是常见的几种:
    • performance:总是将 CPU 频率设置为最高,适合需要高性能的情况。
    • powersave:将 CPU 频率限制在最低,节省电池和能量。
    • ondemand:根据 CPU 使用率动态调整频率,负载大时提升频率,负载小则降低,适合一般用途。
    • conservative:与 ondemand 类似,但频率调整更缓慢,减少频繁切换对系统的影响。
    • schedutil:较新的策略,集成了内核调度程序的信息,以更高效地进行频率调整。

使用 cpufreq 工具

1. 安装 cpufrequtils

在 Ubuntu 等 Linux 发行版中,可以通过安装 cpufrequtils 工具包来控制 CPU 频率:

sudo apt install cpufrequtils

2. 查看当前 CPU 状态

使用 cpufreq-info 查看当前 CPU 的频率状态:

cpufreq-info

输出的信息包括:

  • CPU 当前运行频率
  • 支持的频率范围
  • 当前使用的 governor

3. 手动设置 CPU 频率

你可以通过 cpufreq-set 命令来手动设置 CPU 的频率或策略(governor)。

设置 CPU 频率为特定值:

sudo cpufreq-set -r -f 1.2GHz

设置所有 CPU 使用 performance 模式:

sudo cpufreq-set -r -g performance

设置所有 CPU 使用 powersave 模式:

sudo cpufreq-set -r -g powersave

设置所有 CPU 使用conservative 模式

sudo cpufreq-set -r -g conservative

4. 查看所有支持的 governor

你可以使用以下命令列出 CPU 支持的所有 governor

cpufreq-info -g

cpufreq 的应用场景

  • 延长电池续航:在笔记本电脑或移动设备上,通过降低 CPU 频率,cpufreq 可以有效延长电池续航时间。
  • 降低设备温度:当设备发热时,降低 CPU 频率可以减少功耗和散热。
  • 提升性能:当设备需要处理高负荷任务时,cpufreq 可以动态提升 CPU 频率,提供更好的性能。
  • 服务器省电:在数据中心或服务器场景中,通过合理的 cpufreq 设置,可以降低服务器功耗,节约能源成本。

使用注意事项

  • 在某些设备上,过度降低 CPU 频率可能导致系统性能不佳,特别是在需要持续高性能的情况下。
  • 频繁切换 CPU 频率会有一些开销,可能会对实时性要求高的应用产生影响。
  • 不同的 CPU 支持不同的频率和 governor,因此可调节的频率范围取决于硬件。

总结

cpufreq 是一个非常强大的工具,能够动态管理 Linux 系统的 CPU 频率。通过合理设置 cpufreq,你可以在节能和性能之间取得良好的平衡,特别是在需要长时间电池续航或减少设备发热的情况下非常有用。如果你想更细粒度地控制 CPU 性能,cpufreq 是一个理想的工具。


推荐

将 CPU 的调频策略(governor)设置为 conservative 模式,你可以使用 cpufreq-set 命令来实现。具体步骤如下:

1. 安装 cpufrequtils(如果尚未安装)

首先,确保你已经安装了 cpufrequtils 工具,如果没有,可以使用以下命令进行安装:

sudo apt install cpufrequtils

2. 设置 conservative 模式

使用以下命令将所有 CPU 的调频策略设置为 conservative

sudo cpufreq-set -r -g conservative

其中:

  • -r:表示将设置应用到所有 CPU 核心。
  • -g conservative:表示将调频策略设置为 conservative

3. 验证设置是否成功

可以使用以下命令查看当前使用的 governor 是否为 conservative

cpufreq-info

输出中应该能看到类似的信息:

analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 800 MHz - 2.50 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
  current policy: frequency should be within 800 MHz and 2.50 GHz.
                  The governor "conservative" may decide which speed to use

4. 确保设置在重启后生效

为了确保每次系统启动时自动应用 conservative 模式,可以将命令添加到系统启动项中。

编辑 /etc/default/cpufrequtils 文件:

sudo nano /etc/default/cpufrequtils

将文件内容设置为:

GOVERNOR="conservative"

保存文件并退出后,重启系统或重启 cpufrequtils 服务:

sudo systemctl restart cpufrequtils

这样,在每次系统启动时,CPU 都会默认使用 conservative governor。