云网牛站
所在位置:首页 > Linux教程 > 在笔记本中使用Linux系统插电源就降处理器频率的解决方法

在笔记本中使用Linux系统插电源就降处理器频率的解决方法

2019-04-14 21:41:09作者:爱拼安小匠稿源:linux站

如果你在笔记本电脑中使用Linux操作系统,然后只要插入电源适配器就降处理器的频率,那么请用下面的解决方法处理。

 

背景

笔记本的处理器频率,若使用电池,则可对最高频率做适当限制,以达到省电目的,若插入移动电源,则可以解除限制,让处理器能够在其最高频率上运行,以提高性能,这是最基本的电源管理策略。

然而,我的ThinkPad X200却不走寻常路,故意和我对着干,X200搭载Intel Core 2 Duo P8600 双核处理器,设计最高主频为2.40GHz。在使用“performance”调控器(governor),并尽可能将调控器最高频率设为最大值的情况下:

1、若只使用电池,则处理器最高频率可以达到2.40GHz,平均运行频率常常能超过1.6GHz。

2、但是,若插上电源适配器,过一段时间后,最高频率就被限制在了1.60GHz,且无法使用cpufreq-set工具进行更改。

这也太奇怪了吧,笔记本居然会在插电时降频,尽管插电后电量多到用不完,毫无费电之虞,笔记本却仍然认为应该省电,而使用电池时,笔记本却根本不管这些,允许CPU达到最大频率。

知识延伸:

在Linux下为X1 Carbon CPU降压

在Ubuntu Kylin中检查笔记本电脑的CPU温度

使用Stress Terminal UI在Linux终端中轻松监控CPU利用率

 

尝试解决问题

起初,我以为是BIOS中的节能控制设置不当,有一个设置是Intel SpeedStep Technology,这是英特尔的处理器电源管理功能,我尝试将其中针对AC适配器和电池的策略设置为相同的值,结果重启后问题如故,而关闭该功能后,Linux管理CPU频率的acpi-cpufreq驱动直接失效,不可行,后来,我又尝试将PCI和PCI-E的省电功能关闭,问题同样如故。

看来,不能靠更改BIOS设置来解决插电降频的问题,只能从系统层面入手了,会不会跟Linux内核有关?对此,我尝试了不同的内核版本,以及使用OpenSUSE安装盘的Shell进行测试,运行以下命令设置调节器为performance,读取调控器最大频率(须在root用户下测试):

cd /sys/devices/system/cpu/cpu0/cpufreq

echo performance > scaling_governor

cat scaling_max_freq

结果,插电后仍然降频,由此可排除Linux内核版本和操作系统的问题。

 

突破口:BIOS的限制

在Linux中,控制处理器频率的目录是/sys/devices/system/cpu/cpu*/cpufreq(星号为处理器核心编号),其中包含一系列节点,用于读取或设置处理器频率的参数。

主要包括:

节点名

作用

读写权限

affected_cpus

显示受影响的CPU编号

只读

bios_limit

BIOS提供的频率限制值

只读

cpuinfo_cur_freq

CPU的当前频率

只读,须root

cpuinfo_max_freq

CPU的最大频率

只读,须root

cpuinfo_min_freq

CPU的最小频率

只读,须root

cpuinfo_transition_latency

CPU频率切换的延迟

只读

freqdomain_cpus

受调节且在同一组内的CPU编号

只读

related_cpus

显示当前频率调节器关联的CPU编号

只读

scaling_available_frequencies

频率调节器允许的CPU频率值。设置的频率只能为其中之一,否则会报错

只读

scaling_available_governors

可用的频率调节器

只读

scaling_cur_freq

调节器调控的当前CPU频率。此值为当前CPU的真实频率

只读

scaling_driver

当前的调频驱动

只读

scaling_governor

显示与设置当前使用的频率调节器

读写

scaling_max_freq

显示与设置调节器的最大频率

读写

scaling_min_freq

显示与设置调节器的最小频率

读写

scaling_setspeed

手工设置CPU频率。只在userspace调节器下生效

读写

stats

CPU使用信息统计

目录

注:上述节点中,频率值的单位为Hz。

注意其中的bios_limit,它反映的是BIOS所提供的频率限制值,在本文开头的条件下,使用电池时,其中的值为2400000,而插上电源后该值立刻降到1600000,由此不难得知,是BIOS在限制CPU的频率,X200的BIOS对处理器频率的调控策略简直是弱智。

 

让系统忽略处理器频率限制

那么,有什么办法可以打破限制?的确是可以的,Linux操作系统可以忽略bios_limit中BIOS所提供的不合理限制值,让用户可以自由设置理想的频率,使处理器性能的发挥重回正轨。

具体的做法是,调节Linux内核当中的一个参数——ignore_ppc,将其值设为1,表示忽略BIOS频率限制:

echo 1 | sudo tee /sys/module/processor/parameters/ignore_ppc

设置即时生效,这时再插入电源适配器,即可发现频率再也不会被限制在1.6GHz下了。

若要使该设置在每次重启后都能自动应用,可以更改启动配置文件/etc/default/grub。在root权限下打开它,找到GRUB_CMDLINE_LINUX_DEFAULT,将processor.ignore_ppc=1加在值的后面,就像这样,如下代码:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash processor.ignore_ppc=1"

最后运行以下命令:

sudo update-grub

更新启动参数,重启即可生效。

至此,插电降频问题得到解决了。经过测试,没有任何问题,一切都能流畅运行了。

 

相关主题

下载安装CPU Power Manager在Linux中设置和管理CPU主频

精选文章
热门文章