在引导时将CPU频率指定为Linux的内核CMD_LINE参数



我把笔记本电脑的i5 CPU换成了i7 CPU,这样它可以运行得更快。但由于i7的功率更大,温度也比以前高,我的笔记本电脑经常死机。所以,我用cpupower来指定CPU的最大频率,它可以工作。现在,我的问题是"有没有办法在引导时将CPU频率指定为linux内核的cmd_line参数?",这样我就可以确保系统稳定正确地引导。

顺便说一句,如果新的cpu最多在2.5GHz的频率下运行,一切都很好,性能是旧的两倍。所以我认为更换我的CPU是值得的。

非常感谢!


更新-2018-11-25

此外,我想提到的是,有以下命令可以在不使用任何工具的情况下使用CpuFreq子系统(如用于实现相同目的的cpufrequils)。有时这些工具缺乏功能,或者它们根本无法按我们的意愿工作。因为CpuFreq核心在/sys/devices/system/cmpu/下创建了一个sysfs目录,所以一些属性可以作为读写属性在内核级别进行更改。这些属性更改被称为策略,因为CpuFreq在sysfs中有一个策略接口。以下命令应该在引导时工作,并且在引导时间之间是持久的。

如果比例调节器选择为整数状态;(如果决定使用整数pstate,此部分可能有助于避免更高的频率)

此外,由于想要阻止更高的频率,turbo也可以被禁用。

echo "1" | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo

之后,下面的命令会很有用。

echo "70" | sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct (70 can be changed by another percentage if clock speed and turbo speed is higher numbers. 70-80 should be enough to not reaching above 2.5 GHz)

该属性在中的解释如下https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt并且可以帮助降低更高的CPU频率。

max_perf_pct:限制驾驶员它将其表示为可用性能的百分比。

因为p-状态是操作状态,并且通过将Pn变为P0,频率正在增加。因此,将最大P状态限制为支持的最大性能级别的百分比可能很有用。检查此链接:https://software.intel.com/en-us/blogs/2008/05/29/what-exactly-is-a-p-state-pt-1

此外,在intel_pstate中,CPU共享相同的属性。当使用intel_pstate作为缩放调节器时,可以通过添加以下内核参数来使用作为cpufreq属性(例如scaling_max_freq)的每CPU性能限制;

intel_pstate=per_cpu_perf_limits

否则,CPU可以单独设置

echo -n 2457600 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo -n 2457600 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo -n 2457600 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo -n 2457600 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq

但是,有一个重要的部分是Linux中的内置脚本(/etc/init.d/ondemand)。如果将ondemand或powersave用作缩放调控器,那么我们设置的配置(如上所述)可能会与此脚本发生冲突。应通过以下命令禁用脚本;

sudo /usr/sbin/update-rc.d ondemand disable

更多信息请点击此处:https://help.ubuntu.com/community/UbuntuStudio/Setting_CPU_Governor

禁用ondemand后,可以设置其他缩放调控器(如用户空间、性能),并通过上述配置使用。

这些都是基本的命令(下面和上面的部分),它们应该有助于解决CPU频率缩放问题,因为我也想提供这些信息供将来参考。


首先,我想给出一些关于CPU频率缩放的信息。

有三个术语与此过程有关(它们是称为"CPU性能缩放"的子系统的层),基本上应该对它们进行审查和讨论,以确保正确理解所有内容。

  • CPUFreq核心

  • 缩放驱动程序

  • 缩放调速器

CPUFreq核心是一个基本框架,包含用于所有支持此功能的平台的通用代码基础设施。

CPU频率驱动程序改变由比例调节器管理的CPU p状态,并与硬件通信。(P状态意味着它们是可操作的,而C状态则是除C0状态外的空闲状态。C0状态也是繁忙和活动状态。)

缩放调速器实现缩放算法。

顺便说一句,CPU性能扩展是一个深入的话题,有很多事情需要考虑。基本上,根据上面的信息,下面的命令应该可以满足您的需求。

首先,我认为intel_postate目前被用作笔记本电脑中的缩放驱动程序。因此,禁用它可能会为我们提供更高级的设置和更多的调控器(intel_pstate有两个调控器,分别是节能性能)。我认为powersave是intel_pstate的默认调控器。

sudo vi /etc/default/grub

在GRUB_CMDLINE_LINUX_DEFAULT参数中添加intel_pstate=disable。

GRUB_CMDLINE_LINUX_DEFAULT="intel_pstate=disable"

添加参数后,执行以下命令。

modprobe acpi-cpufreq
sudo update-grub

您可以在启动时通过以下命令检查内核参数

cat /proc/cmdline

通过这种方式,acpi cpufreq将被启用为缩放驱动程序(因为禁用了intel_pstate)。因此,接下来可以将调控器设置为userspace,以按所需频率运行CPU,或者将其设置为默认频率(ondemand应该是acpi-cpufreq的默认设置)。

调速器和最大频率设置的第一种方式

如果您想更改缩放调节器(例如到用户空间):

sudo update-rc.d ondemand disable (This command prevents above commands to be reset after reboot)
sudo apt install cpufrequtils (To control the CPU frequency scaling deamon)
echo 'GOVERNOR="userspace"' | sudo tee /etc/default/cpufrequtils

在这些步骤之后,我们应该有acpi cpufreq作为缩放驱动程序,ondemand(如果您没有更改调控器)作为缩放调控器。所以,最后一件事似乎是设置CPU的最大频率。

像下面这样编辑/etc/default/cpufrequetils应该设置CPU频率。如果文件不存在,请创建它。

MAX_SPEED="2457600"
MIN_SPEED="1536000"

还要检查同一文件中的以下行。

ENABLE="true"
GOVERNOR="ondemand" (or userspace)

但是,通过这种方式,我认为没有办法将所有CPU内核设置为相同的频率值。我看到一些人说下面的方式(第二种方式)将所有CPU内核设置为他们想要的值,但不是第一种方式。

调速器和最大频率设置的第二种方式

安装tlp(Linux电源管理工具)

sudo apt install tlp

安装后,编辑/etc/default/tlp,如下所示:

#选择CPU频率缩放调节器:#ondemand,powersave,性能,保守#带Intel_pstate的英特尔酷睿i处理器driver:#powersave,performance#重要提示:#您必须禁用分发的调控器设置,否则将发生#
冲突。ondemand对于几乎所有工作负载都足够了,您应该知道#你在做什么!CPU_SCALLING_GOVERNOR_ON_AC=按需
CPU_SCALING_GGovernor_ON_BAT=按需

#设置缩放调速器可用的最小/最大频率#可能的值很大程度上取决于您的CPU。对于可用频率请参阅#tlp-stat输出,"+++处理器"一节。CPU_SCALLING_MIN_FREQ_ON_AC=0
CPU_SCALING_MAX_FREQ_ON_AC=0
CPU_SCANLING_MIN-FREQ_ON_BAT=1536000
CPU _SCALING-MAX_FREQ_ON_BAT=2457600

重新启动或挂起设备后,应保留上述设置。

我试图提供并解释设置CPU频率的方法(同时保持设置的持久性),但我可能忘记了一些事情。因此,请检查以上信息,并尝试这些信息是否满足您的需求。此外,您可以使用以下命令来确保一切正常。

cpufreq-info

注意:请查看以下页面了解更多信息。

理事名单
https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt

https://www.kernel.org/doc/html/v4.14/admin-guide/pm/cpufreq.html

https://www.kernel.org/doc/html/v4.12/admin-guide/pm/intel_pstate.html

最终我有时间回复这个问题,因为我正忙于做其他事情。我尝试了以上所有的解决方案,并选择了";tlp+lm传感器+psensor";。以下是我的看法:

  1. cpupower是一个简单但功能相对较差的工具,它只能设置CPU和调速器的MAX/MIN频率
  2. cpufrequils与cpupower基本相同,只是它基于acpi驱动程序,而不是Intel genuin驱动程序。我猜是英特尔的信徒支持p_state的驱动程序应该是英特尔CPU的更好选择
  3. tlp是我最后的选择,它有更多的功能可以监控/调节CPU的温度和频率,以及更多可配置选项

是的,正如Erdem Savasci所说,使用tlp,所有CPU内核的MAX/MIN频率都可以在一步内设置,而这些频率不能与cpufrequils一起设置。

此外,我安装了lm传感器和psensor。前者可以被认为是查询温度/频率/风扇速度的驱动程序,后者是可以显示上述信息的GUI面板。有了这些工具,我相信我的cpu会稳定运行。但是";确保CPU在引导时间稳定运行";尚未找到。以上都是开机后启动的,不是吗?

对不起我英语不好,我是中国人。希望我表达得正确。再次感谢!

最新更新