我使用的是 Ubuntu 16.04 LTS,带有 gnome 桌面。我将调节器设置为“按需”,但 CPU 仍然以最高频率运行。
我尝试了很多方法,但它停留在 2.80 Ghz 几个小时。“scaling_max_freq”和“scaling_min_freq”给出了相同的结果:2801000
答案1
我解决了我的问题这些步骤。
在 K/X/Ubuntu 或其他基于 Debian 的机器上,您可能只需尝试安装 cpufrequtils (
sudo apt-get install cpufrequtils
) 即可使频率缩放正常工作。如果这对您有用,那么您无需执行下面查找和加载正确模块的部分。只需跳到配置缩放调节器的部分即可。内核版本
确保您的内核版本至少为 2.6.12,以便使用将提到的所有可能的调节器。所有频率调整都将通过内核模块而不是用户空间调节器完成。
在 BIOS 中启用支持
进入 BIOS 并确保已为您的 CPU 启用 Cool'n'Quiet (AMD) 或 SpeedStep (Intel)。某些 BIOS 可能没有这两个选项。如果您找不到该选项,则可能是默认启用的。不幸的是,您的 BIOS 可能有该选项,但它被列为另一个名称。如果是这种情况,请查看 BIOS 手册以获取更多信息。
删除所有用户空间 CPU 扩展程序
有一些用户空间程序可以运行来扩展处理器频率。我们将使用内核扩展 CPU,因此我们不需要这些程序。因此,如果您有任何程序,我们现在将删除它们。您可能想要研究这些程序,因为它们在某些情况下会有所帮助。本文将仅讨论使用内核模块进行扩展。
sudo apt-get remove powernowd cpudyn cpufreqd powersaved speedfreqd
安装适合您的 CPU 的模块
当您安装系统时,很有可能您的 CPU 被默认检测到,并且扩展所需的模块已在运行。下面的命令将帮助您识别您拥有的处理器类型。
cat /proc/cpuinfo
了解了这一点之后,您就会知道需要为其加载哪些内核模块。下面是查看已加载哪些内核模块的命令。
lsmod
以下是 CPU 描述以及根据您的处理器加载内核模块所使用的命令。查看上面 lsmod 的输出,并使用下面单词“modprobe”后面的模块名称来查看您是否已加载模块。如果已加载,则继续下一步。如果没有,则使用您找到的 CPU 信息并找出您需要加载哪个模块。然后运行命令来加载它。
CPU:PIII-M 或 P4,无预估 2 种模块类型。
sudo modprobe speedstep-ich
或者
sudo modprobe speedstep-smi
CPU:Intel Core Duo、Intel Core2 Duo 或 Quad、或者 Intel Pentium M。这已合并到后续内核的 acpi-cpufreq 模块中。
sudo modprobe speedstep-centrino
CPU:Intel Celeron、Xeon 和 Pentium 4 处理器
sudo modprobe p4_clockmod
CPU:AMD K6。插槽类型:Socket 7
sudo modprobe powernow-k6
CPU:AMD Sempron/Athlon/MP(K7)。插槽类型:A、插槽 A。
sudo modprobe powernow-k7
CPU:AMD Duron/Sempron/Athlon/Opteron 64 (K8)。插槽类型:754、939、940、S1 (638)、AM2 (940)、F (1207)。
sudo modprobe powernow-k8
CPU:VIA CentaurHauls* 或 Transmeta GenuineTMx86*
sudo modprobe longhaul
如果以上方法都不起作用,那么作为最后的手段,您可以尝试 ACPI 的通用方法。在 2.6.20 之后的内核中,更多驱动程序被转移到此模块,例如 speedstep-centrino。
sudo modprobe acpi-cpufreq
插入缩放模块
现在 CPU 频率模块已加载,我们可以插入缩放模块了。要查看有哪些可用的缩放模块,可以使用此命令(使用 Bash shell)。
ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq
如果您有这些模块,那么它们可能已在运行。要检查它们是否正在运行,请尝试以下命令。
lsmod | grep freq
如果您看到 cpufreq 目录中列出的大多数或所有模块,则说明您已完成。转到下一部分。如果没有,以下是加载模块的命令。
sudo modprobe cpufreq_conservative cpufreq_ondemand cpufreq_powersave cpufreq_stats cpufreq_userspace freq_table
现在它们已加载,您将需要在启动时加载它们。要在基于 Debian 的系统(如 K/X/Ubuntu)上执行此操作,请将以下几行放入 /etc/modules 文件中。您必须检查在其他发行版(如 RedHat)上将它们放在哪里(/etc/modules.conf?)。请记住在此处也放入您的 CPU 模块的名称(您在上面找到的),以便它在启动时加载。这仅在它未在启动时加载的情况下才适用。如果您第一次查看时没有使用 lsmod 找到它,则它不会自动加载。
cpufreq_conservative cpufreq_ondemand cpufreq_powersave cpufreq_stats cpufreq_userspace freq_table
配置扩展模块
现在它们已加载,我们可以配置调控器了。首先,您必须选择要使用的调控器。下面列出了调控器及其工作原理。您可以决定哪一个最适合您的需求。如果已加载调控器的模块,则可以使用它。请记住,您可以使用 lsmod 命令查看已加载的模块。下面的命令是使用 sudo 完成的,就像在 K/X/Ubuntu 世界中一样。如果您愿意,可以切换到 root 并运行相同的命令,只是没有 sudo sh -c " "。
显示您可以使用的可用调节器。
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
按需调节器 - 根据当前使用情况设置 CPU 频率。要做到这一点,CPU 必须能够非常快速地切换频率。这对于在短时间内执行大量工作(高负载)而在其余时间不执行太多工作(低负载)的系统非常有用。
sudo sh -c "echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
按需调控器配置选项
采样率 - 以微秒(百万分之一秒)为单位。这是您希望内核查看 CPU 使用率并决定如何处理频率的频率。通常将其设置为大约“10000”或更大的值。如果您想将采样率设置为 1 秒,则可以将其设置为 1000000,如下例所示。
sudo sh -c "echo 1000000 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/sampling_rate"
show_sampling_rate_(min|max) - 这是您可以设置“sampling_rate”的最小和最大采样率。我也相信以微秒为单位。我见过关于在后续内核中消除此问题的讨论,但并不指望将来还会存在。要查看两者,只需执行以下操作。
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/ondemand/sampling_rate_min sudo cat /sys/devices/system/cpu/cpu0/cpufreq/ondemand /sampling_rate_max
up_threshold - 这定义了“sampling_rate”采样之间的平均 CPU 使用率,以便内核决定是否应增加频率。例如,当它设置为默认值“80”时,这意味着在检查间隔之间,CPU 的平均使用率需要超过 80%,然后才能决定是否需要增加 CPU 频率。要将其设置为较低的值(例如 20%),请执行以下操作。
sudo sh -c "echo 20 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold"
ignore_nice_load - 此参数的值为“0”或“1”。设置为“0”(默认值)时,所有进程都计入“CPU 利用率”值。设置为“1”时,以“nice”值运行的进程将不计入(因此将被忽略)总体使用率计算中。如果您在笔记本电脑上运行 CPU 密集型计算,而您不关心完成计算需要多长时间,则此功能非常有用,因为您可以对其进行“nice”处理,并阻止其参与决定是否增加 CPU 频率的过程。要启用此功能,请执行以下操作。
sudo sh -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/ignore_nice_load"
保守调节器 - 根据系统当前负载调整 CPU 频率。它与按需调节器类似。不同之处在于,它会适度地增加或减少 CPU 速度,而不是在 CPU 负载过大时立即跳到最大速度。这最适合在电池供电的环境中使用。
sudo sh -c "echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
保守的调节器配置选项
freq_step - 这描述了 CPU 频率应以多少百分比的步长平稳增加和减少。默认情况下,CPU 频率将以最大 CPU 频率的 5% 为单位增加。您可以将此值更改为 0 到 100 之间的任何值,其中“0”将有效地将您的 CPU 锁定在一个速度上,而不管其负载如何,而“100”在理论上将使其行为与“按需”调节器相同。例如,要使其以 10% 的增量增加和减少,您可以执行以下操作。
sudo sh -c "echo 10 > /sys/devices/system/cpu/cpu1/cpufreq/conservative/freq_step"
down_threshold - 这与“ondemand”调节器的“up_threshold”相同,但方向相反。例如,当设置为其默认值“20”时,这意味着如果 CPU 使用率需要在采样之间低于 20%,频率就会降低。例如,要将下限阈值设置为 30%,您需要执行以下操作。
sudo sh -c "echo 30 > /sys/devices/system/cpu/cpu0/cpufreq/conservative/down_threshold"
sample_rate - 与 ondemand 相同。sampling_rate_(min|max) - 与 ondemand 相同。up_threshold - 与 ondemand 相同。ignore_nice_load - 与 ondemand 相同。
性能调节器 - 无论负载如何,CPU 都以最大频率运行。此模块可能未列在正在运行的模块中,但仍可用。我猜它是内置在 K/X/Ubuntu 的内核中的。您的内核可能也是这样。
sudo sh -c "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
省电调节器 - 无论负载如何,CPU 都以最低频率运行。
sudo sh -c "echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
有关 CPU 的 Cpufreq 统计信息
cpufreq 模块列出了有关 CPU 的统计数据。这些统计数据可帮助您了解处理器的当前频率或 CPU 可扩展到的可用频率等信息。请查看下文。
cpuinfo_cur_freq - 显示 CPU 的当前频率。您也可以通过执行“cat /proc/cpuinfo”来查找。
sudo cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq
cpuinfo_max_freq - 显示您的 CPU 可以扩展到的最大频率。
sudo cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_max_freq
cpuinfo_min_freq - 显示您的 CPU 可以扩展到的最小频率。
sudo cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_min_freq
scaling_available_frequencies - 显示您的 CPU 可以扩展到的所有可用频率。
sudo cat /sys/devices/system/cpu/*/cpufreq/scaling_available_frequencies
scaling_cur_freq - 显示您的 CPU 当前可用的频率。
sudo cat /sys/devices/system/cpu/*/cpufreq/scaling_cur_freq
scaling_driver - 显示 CPU 正在使用的 cpufreq 驱动程序。
sudo cat /sys/devices/system/cpu/*/cpufreq/scaling_driver
scaling_max_freq - 设置您的 CPU 允许扩展的最大频率。查看上面的 scaling_available_frequencies 的输出。然后,您可以选择其中一个数字(频率)来设置为 CPU 允许扩展的最大频率。例如,如果 scaling_available_frequencies 的 CPU 输出为 2000000 1800000 1000000,那么您可以将其设置为 1800000。因此,当 CPU 扩展时,它只会达到最大值 1800000,而不是 2000000。以下是有关如何设置它的示例。
sudo sh -c "echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"
scaling_min_freq - 与 scaling_max_freq 相同,但设置的值不允许 CPU 低于该值。例如。
sudo sh -c "echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"
重启时保留 cpufreq 的任何设置
由于我们所做的所有设置都在 /sys 虚拟文件系统中,因此重启后不会保存这些设置。您可以通过几种方式在重启时进行设置。
第一种方法是将您执行的行放在 /etc/rc.local 中。由于 root 在启动时执行 rc.local,因此您无需在每行之前使用 sudo。您的 rc.local 可能看起来像以下示例,它将 ondemand 调节器和 up_threshold 设置为 20%。不要忘记确保您的 CPU 模块和 cpufreq 缩放模块也设置为在启动时加载。
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo 20 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold
第二种在重启时保留设置的方法是安装 sysfsutils (
sudo apt-get install sysfsutils
)。然后,您可以将以下几行添加到 /etc/sysfs.conf,其功能与示例中相同/etc/rc.conf
。devices/system/cpu/cpu0/cpufreq/scaling_governor=ondemand devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold=20