将 CPU 频率指定为 Linux 启动时的内核 CMD_LINE 参数?

2024-04-07

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

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

多谢!



更新 - 2018-11-25

另外,我想提一下,有以下命令可以使用 CpuFreq 子系统,而无需使用任何工具(例如 cpufrequtils,因为它用于实现相同的目的)。有时这些工具缺乏功能,或者根本无法按照我们的要求工作。由于 CpuFreq 核心在 /sys/devices/system/cpu/ 下创建了一个 sysfs 目录,因此某些属性可在内核级别以读写方式进行更改。这些属性更改称为策略,因为 CpuFreq 在 sysfs 中有一个策略接口。下面的命令应该在启动时工作,并且在启动期间保持不变。

如果缩放调控器选择为 intel_pstate; (如果决定使用 intel_pstate,这部分可能有助于避免更高的频率)

由于想要防止更高的频率,也可以禁用涡轮增压。

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 https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt并且可能有助于降低更高的 CPU 频率。

max_perf_pct:限制将请求的最大 P-State 司机。它将其表示为可用性能的百分比。

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

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

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 https://help.ubuntu.com/community/UbuntuStudio/Setting_CPU_Governor

禁用 ondemand 后,可以通过上述配置来设置和使用其他扩展调节器(如用户空间、性能)。

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


首先,我想提供一些有关CPU频率调整的信息。

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

  • CPU频率核心

  • 缩放驱动程序

  • 缩放调速器

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

CPU 频率驱动程序更改由缩放调速器管理的 CPU P 状态,并与硬件通信。 (P-State 表示它们是可操作的,与 C-State 相比,C-State 是除 C0 状态之外的空闲状态。C0 状态也是忙碌和活动状态。)

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

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

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

sudo vi /etc/default/grub

将 intel_pstate=disable 添加到 GRUB_CMDLINE_LINUX_DEFAULT 参数。

GRUB_CMDLINE_LINUX_DEFAULT="intel_pstate=disable"

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

modprobe acpi-cpufreq

sudo update-grub

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

cat /proc/cmdline

通过这种方式,ACPI CPU频率将作为缩放驱动程序启用(因为禁用 intel_pstate)。所以,下一步可以将州长设置为用户空间以所需频率运行 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 CPU频率作为缩放驱动器和ondemand(如果您没有更改调控器)作为缩放调控器。所以,最后一件事似乎是设置 CPU 的最大频率。

像下面这样编辑 /etc/default/cpufrequtils 应该设置 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 的 Intel Core i 处理器 驱动程序:#省电,性能#重要:#你must禁用您的发行版的调控器设置,否则会发生冲突#
发生。按需就足够了几乎全部工作负载,你应该 知道#你在做什么! CPU_SCALING_GOVERNOR_ON_AC=按需
CPU_SCALING_GOVERNOR_ON_BAT=按需

# 设置缩放调节器可用的最小/最大频率。 # 可能的值很大程度上取决于您的 CPU。对于可用频率 请参阅 # tlp-stat 输出,“+++ 处理器”部分。 CPU_SCALING_MIN_FREQ_ON_AC=0
CPU_SCALING_MAX_FREQ_ON_AC=0
CPU_SCALING_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/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.14/admin-guide/pm/cpufreq.html

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CPU 频率指定为 Linux 启动时的内核 CMD_LINE 参数? 的相关文章

  • 如何在 Docker 容器中运行 Nginx 而不停止?

    我在 Docker 容器上安装了 Nginx 并尝试像这样运行它 docker run i t p 80 80 mydockerimage usr sbin nginx 问题是 Nginx 的工作方式是 初始进程立即生成一个 Nginx 主
  • 使用 java.nio.Files 更改 Linux 下的文件所有者组

    我有一台 Linux 服务器 并且正在 Java 中为服务器上的多个网站运行图像调整大小作业 网站文件由不同的操作系统用户 组拥有 新创建的缩略图 预览由运行调整大小作业的用户拥有 现在我正在谷歌搜索如何在调整大小程序中更改新创建的预览 缩
  • 如何“安装”自定义 Windows 驱动程序?

    我计划用 C 语言编写一个基本的 Windows 注册表过滤器 该过滤器的目的是挂钩所有 用户和内核特权 注册表调用 以便我可以在我的程序中使用它们 我基本上是复制 Mark Rusinovich 的 regmon 进程监视器 但更基本 我
  • 如何向正在运行的 Linux 进程发送 Ctrl-Break?

    我正在调试在 Sun 的 JDK 1 4 2 18 上运行的应用程序中的内存泄漏 该版本似乎支持命令行参数 XX HeapDumpOnCtrlBreak 这可能会导致 JVM 在遇到控制中断时转储堆 如何将其发送到 Linux 机器上的后台
  • 如何显示 Jupyter 笔记本的版本并在 Jupyter 笔记本中运行单元?我收到错误:错误的解释器

    我已经安装了 Anaconda 并使用 conda 环境和 conda 命令来安装软件 当我输入 jupyter notebook version 我收到以下错误 zsh Users cr517 local bin jupyter bad
  • VS Code 不会构建具有多个 .cpp 源文件的 C++ 程序

    请注意 我在 Ubuntu 17 10 上使用 VS Code 并使用 GCC 编译器 我在构建一个使用附加 cpp 文件的简单程序时遇到问题 我可能在这里遗漏了一些明显的东西 因为我对编程相当陌生 但我会解释到目前为止我所做的事情 这阻止
  • 在 Alpine Docker 容器上安装 OpenSSH

    第一次运行 alpine docker 容器并尝试 openssh 安装时 会发生以下情况 ole T docker run it rm alpine bin ash apk add openssh WARNING Ignoring APK
  • 自动将 Linux 文件名重命名为 Windows 中合法的新文件名

    我想将 linux 文件重命名为在 windows 中合法的文件名 它的长度不应超过允许的长度 并且不应包含 Windows 中不允许的字符 有时我将论文的标题复制到文件名 它们有特殊字符 例如 or 另外 从 pdf 中复制和粘贴标题时
  • 从 TestContainer 访问 Podman REST API

    我使用 Maven 3 和 Podman 1 8 0 开发一个 Java 应用程序 据我了解 Podman 提供了与 Docker 兼容的 REST API Java集成测试使用TestContainer框架 TestContainer 无
  • 在执行期间访问.eh_frame数据

    我正在尝试访问以下内容 eh frame正在运行的程序的一部分 具体来说 该程序是 Linux 内核 2 6 34 8 这 eh frame包含用于异常处理的有用数据 我想在内核代码内部使用它 该部分已经由以下人员编写gcc readelf
  • Android Studio无法更新

    我正在运行 Mint 14 Linux 并且在使用 Android Studio 时遇到了一个主要问题 运行更新功能时 所有软件包都会返回 访问被拒绝 状态 我怎样才能解决这个问题 如何授予下载和安装的权限 附加信息 studio sh 正
  • FLTK 1.4 小部件位置 w.r.t. X11 根窗口?

    context 我正在和其他人一起编码参考系统 http refpersys org C 17 上的 GPLv3 项目gitlab https gitlab com bstarynk refpersys适用于 GNU Linux x86 6
  • 如何在 Amazon Linux 上安装最新版本的 GDAL?

    我想安装GDAL https gdal org 在运行 Amazon Linux 的 EC2 实例上 我认为它基于 RHEL 6 如果可能的话 我想避免从源代码编译 EPEL Yum 存储库中包含的 GDAL 版本对于我的目的来说太旧了 g
  • Linux 中如何确定哪个进程正在使用某个端口

    我目前正在其默认端口上运行 RethinkDB 因为如果我将浏览器指向localhost 8080我看到 RethinkDB Web 界面 我想关闭 RethinkDB 并使用以下命令在另一个端口上重新打开它 port offset争论 然
  • Plink 通过 C# 返回不需要的字符

    通过 C 使用 Plink 时 我在结果前后收到不需要的字符 Command ls l informatica tgtdynamicparams out grep vaulttest grep Sep 1 awk print 9 sort
  • 无法在 Linux 中阻止从命名管道 (FIFO) 读取

    很奇怪 我似乎无法完成这项工作 这是我的架构 我有一个命名管道 它将在永远运行 root读取器进程和多个应用程序编写器进程 读者进程必须是blocking当作家们在nonblocking 因此 这就是我在阅读器进程中所做的 该进程将运行ro
  • 使用 sed 和 pstree 显示正在使用的终端类型

    我一直在尝试仅显示用作名称的终端类型 例如 如果我使用 konsole 它会显示 konsole 到目前为止我一直在使用这个命令 pstree A s 输出这个 systemd konsole bash pstree 我有以下内容可以从该行
  • 转储 $mft 文件的内容

    对于一些商业的我正在做的项目我需要能够读取 mft 文件中存储的实际数据 我找到了一个gpl lib http www codeproject com KB files NTFSParseLib aspx artkw ntfs这可能会有所帮
  • 如何在 linux bash shell 中对字符串数组进行排序? [复制]

    这个问题在这里已经有答案了 例如 数组是 link2 pathname link1 pathname link3 pathname 我怎样才能得到像下面这样的数组 link1 pathname link2 pathname link3 pa
  • Python 在打开套接字时可以选择哪个网络适配器吗?

    运行 python 应用程序的目标计算机将具有三个可用的网络接口 一般来说 所有三个网络都会有很大不同 但是三个网络中的两个可能位于相似的网络上 在下面的示例中 我无法控制 ETH 2 上的目标地址 因为它是预先配置的系统 因此我被迫以编程

随机推荐

  • 如何向 jfreechart 创建的图表添加缩放功能

    我使用 jfree 绘制了 XY 图表 现在我想为其添加缩放功能 这必须使用图表底部的滑块来完成 如何添加 Windows 照片查看器中提供的缩放功能 另外 当用户将鼠标悬停在绘制的线上时 我想将图表的当前 Y 值显示为工具提示 我没有得到
  • redirect_uri 不属于应用程序

    类似的问题和答案都没有解决我的问题 我有两个 Facebook 应用程序 一个是另一个的测试版本 因此它们几乎相同 我测试时没有任何问题 但在实时应用程序上 我收到 redirect uri 不属于应用程序 错误 这个申请就是一个很好的例子
  • 矢量化和尴尬并行之间有什么关系?

    这个问题说明了一切 在我看来 矢量化与令人尴尬的并行问题密切相关 换句话说 所有可矢量化的程序都必须是极其并行的程序 它是否正确 对令人尴尬的并行性的快速总结 一个代码是尴尬地平行如果代码可以毫不费力地并行化 特别是处理数据依赖性 请注意
  • 如何将焦点设置到 NSButton?

    I m writing a small menubar application for OS X Yosemite When clicking on the menubar icon a popover appears with a num
  • 类模板可以在没有成员的情况下实例化吗?

    The 维基百科文章 http en wikipedia org wiki Template metaprogramming说 实例化类模板不会导致其成员定义被实例化 我无法想象 C 中的任何类被实例化 无论是否从模板中 类成员也没有被实例
  • 将表单值附加到 Go 中的 GET/POST 请求

    我想定义一个http Client自动将表单值附加到所有 GET POST 请求 我天真地尝试实施http RoundTripper从另一个库复制 粘贴时使用此技术来修改每个请求的标头 type Transport struct Trans
  • 如何在 IntelliJ IDEA 中自动完成 lambda?

    I m using IntelliJ IDEA 13 with Java 8 and wonder how to autocomplete lambdas Before Java 8 I used anonymous inner class
  • 循环遍历模型并在视图中为每个属性创建文本框

    我有一个具有 5 6 个属性的模型 是否可以循环遍历模型中的所有属性 公共属性 并在每次迭代的视图中创建一个文本框 而不是繁琐地编写一行代码来在视图中创建文本框 Thanks 是的 你可以使用 Html EditorForModel 或者
  • Emacs:持续突出显示一个区域

    Emacs 扩展markerpen el 链接文本 http www emacswiki org emacs MarkerPens 允许您突出显示缓冲区中的任意区域 使用此扩展 一旦您终止缓冲区 添加的突出显示就会丢失 然而 如果能够以 持
  • 是否可以向我没有源代码的类添加断点?

    我想在 Eclipse 中的类中添加断点 但我没有它的源代码 是否可以在其中添加断点 就我而言 我实际上只需要知道何时调用方法 附带说明 有人有 j2ee api 1 3 jar 的源代码吗 如果打开大纲视图 您可以选择一种方法 右键单击并
  • IntelliJ 社区找不到 Web 应用程序 Artifact 来生成 WAR

    我在用着IntelliJ IDEA 社区版生成一个war来自 Maven 项目的文件 当谈到生成这个战争文件时 我在工件中找不到战争选项 我尝试过 1 前往文件 gt 项目结构 gt 工件 gt 类型 但是没有提到WAR 2 右键单击项目模
  • 绑定 Span 的内容

    我有一个显示文本的窗口 文本有两部分 第一部分是固定的 而第二部分需要是在窗口上声明的 DependencyProperty 的内容 我考虑使用包含两个 Span 的 TextBlock 第一个包含固定内容 第二个包含可变内容 但我在 Sp
  • SQL Server 2008存储过程结果作为列默认值

    首先 谢谢各位 当我什至找不到词语来解释我到底想做什么时 你总是知道如何指导我 我的几个表上的列的默认值需要等于其他表中其他列上的一些复杂计算的结果 我的第一个想法是简单地让列默认值等于存储过程的结果 我还会从调用表的列中提取一个或多个参数
  • 在 CakePHP 应用程序中启用 CORS

    我正在尝试为 CakePHP 中内置的 API 启用 CORS 以便可以通过 AppController 中的以下内容访问所有请求 public function beforeFilter header Access Control All
  • 尽管文件可访问,但“Lighthouse 无法下载 robots.txt 文件”

    我有一个NodeJS NextJS应用程序运行于http www schandilla com http www schandillia com 该项目有一个机器人 txt文件可访问于http www schandillia com rob
  • Spark 与 scala [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 考虑 2 个数据框holiday df and everyday df有 3 列如下 假期 df 5 条记录 Count
  • 如何从sparkContext读取特定行

    您好 我正在尝试使用 Spark 从文本文件中读取特定行 SparkConf conf new SparkConf setAppName appName setMaster master sc new JavaSparkContext co
  • 如何允许仅从 VPC 内的 EC2 实例调用 AWS Lambda 函数

    我正在努力理解如何从 VPC 内的 EC2 实例轻松调用 lambda 函数 我认为我有一个很常见的问题 但奇怪的是我没有找到任何特定于这个 模式 的东西 我在 EC2 实例中有一个 Python 应用程序 我想使用 Lambda 函数并行
  • 通过类 AbstractAnnotationConfigDispatcherServletInitializer 设置“活动配置文件”?

    在扩展类 AbstractAnnotationConfigDispatcherServletInitializer 时 如何设置 活动配置文件 属性 根据您要设置的上下文的配置文件 一种方法是覆盖 AbstractAnnotationCon
  • 将 CPU 频率指定为 Linux 启动时的内核 CMD_LINE 参数?

    我将笔记本电脑的i5 CPU更换为i7 CPU 这样它可以运行得更快 但由于i7的功率更大 温度也比以前更高 所以我的笔记本经常死机 所以 我使用cpupower来指定CPU的最大频率 它起作用了 现在 我的问题是 有没有办法在启动时将CP