CPU频率缩放卡住了2.80 Ghz并且没有下降

我正在使用Ubuntu 16.04 LTS和gnome桌面。 我将调控器设置为“按需”,但CPU仍以最高频率运行。

我尝试了很多东西,但是它坚持了2.80 Ghz几个小时。 “scaling_max_freq”和“scaling_min_freq”给出相同的东西:2801000

我用这些步骤解决了我的问题。

在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没有est.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。 sockets类型:sockets7

 sudo modprobe powernow-k6 

CPU:AMD Sempron / Athlon / MP(K7)。 sockets类型: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命令查看加载了哪些模块。 在K / X / Ubuntu世界中使用sudo完成命令。 如果你愿意,你可以切换到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" 

Ondemand调控器配置选项

sampling_rate – 以微秒(百万分之一秒)为单位。 这是您希望内核查看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 utilization”值。 设置为“1”时,在整体使用计算中,使用“nice”值运行的进程不会计数(因此会被忽略)。 如果您在笔记本电脑上运行CPU密集型计算而不关心完成所需的时间,这非常有用,因为您可以“好”并防止它参与决定是否增加CPU频率的决策过程。 要启用此function,请执行以下操作。

 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”将使其行为与“ondemand”调控器的行为相同。 例如,要以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" 

sampling_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" 

Powersave调速器 – 无论负载如何,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 governor和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