![CPUFreq:当笔记本电脑使用电池供电时,只有“按需”和“省电”调节器才有效](https://linux22.com/image/1205132/CPUFreq%EF%BC%9A%E5%BD%93%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91%E4%BD%BF%E7%94%A8%E7%94%B5%E6%B1%A0%E4%BE%9B%E7%94%B5%E6%97%B6%EF%BC%8C%E5%8F%AA%E6%9C%89%E2%80%9C%E6%8C%89%E9%9C%80%E2%80%9D%E5%92%8C%E2%80%9C%E7%9C%81%E7%94%B5%E2%80%9D%E8%B0%83%E8%8A%82%E5%99%A8%E6%89%8D%E6%9C%89%E6%95%88.png)
所以我希望在笔记本电脑放电时能随心所欲地使用它。问题是,我的 Acer Aspire 5 有两个 AMD GPU:AMD R7 M440(我的集成 GPU)和 RX540(专用 GPU)。当我的笔记本电脑插入电源时,CPU 频率会一路升至 2.7Ghz,我就可以玩 Steam 游戏,没问题。但如果不插入电源,CPU 频率不会超过 1.8Ghz(按需)和 1.4Ghz(省电);笔记本电脑使用电池供电时性能不起作用,这很奇怪,因为我的处理器是 AMD A12 APU。我知道这可能是英特尔 Pstate 的症状,但我不知道 AMD 是否有类似的功能。如果有,请告诉我,以便我可以禁用它。我希望我的笔记本电脑在放电时的性能与插入插座时相同。据我所知,要么是某些东西阻止了 ACPI 调节器更改 CPU 频率,要么这可能是我不知道的新内核功能。如果您想知道我的 UEFI/BIOS 设置是什么,那么它们甚至不存在于这台笔记本电脑上。这是 CPUFreq-info 输出的内容:https://pastebin.com/FeApPeDC CPU 工频输出:https://pastebin.com/Wuy7fnwa CPUFreq 驱动程序:https://pastebin.com/FSAGjg4t
问题:A) 如何编辑调速器的最小和最大频率?我尝试使用 nano /sys/devices/system/cpu/cpu0/cpufreq/"scaling_min_frequency",但它不允许我以 root 身份进行编辑。
B) 即使我的笔记本电脑使用 AMD CPU 电池供电,是什么真正阻止我的 CPU 频率上升到 2.7Ghz?
C) 我可以将调节器参数设置为启动器的参数吗?这背后的想法是,每当启动游戏时,应用程序都会设置调节器本身,因此我可以将其作为 Steam 游戏启动器参数:
DRI_PRIME=1 %command% cpupower frequency-set -f 2700000(这相当于右键单击游戏图标并选择使用 dGPU 启动它并将所有设置调至最大)
如果您需要命令的输出,请告诉我,我很乐意提供。谢谢。
答案1
问题A:
设置 的一种方法是查看可用频率,然后选择一个。示例/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_frequency
:/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
doug@s17:~$ cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
800000
doug@s17:~$ cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
2400000 2133000 1867000 1600000 800000
doug@s17:~$ echo 1867000 | sudo tee /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
1867000
doug@s17:~$ cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
1867000
doug@s17:~$
但是您确实需要对所有 CPU 执行此操作,并且需要使用系统可用的频率,正如我的示例一样。
还请注意,您似乎正在使用userspace
调控器。以上是针对ondemand
调控器的。
现在,如果出于某种原因,最大 CPU 频率已被限制到您尝试设置的值以下,则上述操作将失败并显示一条Invalid argument
消息。在这种情况下,您需要先恢复最大频率。示例:
doug@s17:~$ echo 1600000 | sudo tee /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
1600000
doug@s17:~$ echo 1867000 | sudo tee /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
1867000
tee: /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq: Invalid argument
doug@s17:~$ echo 2400000 | sudo tee /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
2400000
doug@s17:~$ echo 1867000 | sudo tee /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
1867000
附注:实现目标的最简单方法可能就是切换到性能调节器。例如,以 sudo 身份运行以下命令:
doug@s15:~/temp$ cat set_cpu_performance
#! /bin/bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "performance" > $file; done
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
对于按需模式也类似:
doug@s15:~/temp$ cat set_cpu_ondemand
#! /bin/bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "ondemand" > $file; done
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
问题B:
我不确定。你正在运行 tlp 吗?也许它正在运行。也可能是你的 BIOS。它不是 acpi-cpufreq CPU 频率调整驱动程序中的任何正常调节器。但是,你需要检查你似乎正在使用的用户空间调节器,因为它可能会限制某些事情。
问题C:
我不知道。
其他说明:
我知道这可能是英特尔 Pstate 的症状
它不是。
我不知道 AMD 是否有与该 [intel_pstate 驱动程序] 等效的驱动程序。如果有,请告诉我
从您的帖子来看,您正在使用通用的 acpi-cpufreq 驱动程序。
答案2
在继续阅读之前,请记住,我想要做的只是让我的笔记本电脑在游戏中发挥 100% 的性能(这适用于整个系统),为此我想使用“性能”调节器。
因此,在尝试失败之后,我最终得出结论,如果继续使用非常陈旧的技巧和提示,我将一事无成。我向群组、团队(来自 googlemail,它拒绝了我所有的电子邮件,声称我向他们发送了病毒)和 Hexchat(实际上,我知道来自 #linuxmint 的社区想要提供帮助,但他们不知道他们在说什么)寻求帮助。因此,我自己进行了更深入的调查,经过无数个小时、几份文档和许多挫折,我联系了一些点,这是我的解决方案:当我的笔记本电脑使用电池供电时,linux 内核在扩展 CPU 频率方面做得非常糟糕。它不会做它应该做的事情。让我告诉你:
使用的工具:CPU 频率缩放监视器 [Mate 面板小程序] CPUFrequtils、libcpufreq0 请记住,这些是 AMD A12 的频率步骤:1.4Ghz、1.8Ghz、2.3Ghz 和 2.7Ghz
我们已经知道 ondemand 和 powersave 会降低处理器的频率。但是如果我想在 Linux 上玩游戏,而笔记本电脑正在放电,“性能”应该最大化一切以运行重型应用程序或游戏。否则,它就没有存在的理由了。但它所做的就是保持在 1.8Ghz 上,不多也不少。可悲。此时我确信我使用的工具不会有任何不同,所以我专注于 BIOS 限制。可能就是这样。这是我想到的解决方法:
sudo nano /sys/module/processor/parameters/ignore_ppc
这基本上忽略了 BIOS 限制,并允许内核将 CPU 频率调整到高于 1.8Ghz。我将其从 0(默认值)更改为 1。在从 CPU 频率面板小程序中选择“性能”后,它出现了。但我并不相信。所以我做了
xrandr --setprovideroffloadsink 0x44 0x79
为了让 Xrandr 将图形任务卸载到我的 dGPU。然后:
DRI_PRIME=1 glmark2
看一下这个:
//使用“性能”调节器进行测试,使用电池运行,将 ignore_ppc 设置为 1 rodolfo@rodolfo-Aspire-A515-41G:~$ DRI_PRIME=1 glmark2 ========================================================= glmark2 2014.03+git20150611.fa71af2d ============================================================== OpenGL 信息 GL_VENDOR:X.Org GL_RENDERER:Radeon 500 系列(POLARIS12 / DRM 3.23.0 / 4.15.0-38-generic,LLVM 6.0.0) GL_VERSION:3.0 Mesa 18.0.5 ============================================================ [build] use-vbo=false:FPS:447 帧时间:2.237 毫秒 [build] use-vbo=true:FPS:504 帧时间:1.984 毫秒 [纹理] 纹理过滤器=nearest:FPS:477 帧时间:2.096 毫秒 [纹理] 纹理过滤器=linear:FPS:480 帧时间:2.083 毫秒 [纹理] 纹理过滤器=mipmap:FPS:487 帧时间:2.053 毫秒 [着色] shading=gouraud: FPS: 498 帧时间:2.008 毫秒 [shading] shading=blinn-phong-inf: FPS: 495 帧时间:2.020 毫秒 [shading] shading=phong: FPS: 493 帧时间:2.028 毫秒 [shading] shading=cel: FPS: 485 帧时间:2.062 毫秒 [bump] bump-render=high-poly: FPS: 465 帧时间:2.151 毫秒 [bump] bump-render=normals: FPS: 502 帧时间:1.992 毫秒 [bump] bump-render=height: FPS: 501 帧时间:1.996 毫秒 [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 464 帧时间: 2.155 毫秒 [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 354 帧时间:2.825 毫秒 [pulsar] light=false:quads=5:texture=false: FPS: 491 帧时间:2.037 毫秒 [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 346 帧时间:2.890 毫秒 [desktop] effect=shadow:windows=4: FPS: 453 帧时间:2.208 毫秒 [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 224 帧时间:4.464 毫秒[缓冲区] 列=200:交错=false:更新分散=0.9:更新分数=0.5:更新方法=子数据:FPS:251 帧时间:3.984 毫秒 [缓冲区] 列=200:交错=true:更新分散=0.9:更新分数=0.5:更新方法=地图:FPS:301 帧时间:3.322 毫秒 [想法] 速度=持续时间:FPS:484 帧时间:2.066 毫秒 [水母]:FPS:449 帧时间:2.227 毫秒 [地形]:FPS:120 帧时间:8.333 毫秒 [阴影]:FPS:472 帧时间:2.119 毫秒 [折射]:FPS:247 帧时间:4.049毫秒 [条件] fragment-steps=0:vertex-steps=0: FPS: 491 帧时间:2.037 毫秒 [条件] fragment-steps=5:vertex-steps=0: FPS: 482 帧时间:2.075 毫秒 [条件] fragment-steps=0:vertex-steps=5: FPS: 475 帧时间:2.105 毫秒 [功能] fragment-complexity=low:fragment-steps=5: FPS: 473 帧时间:2.114 毫秒 [功能] fragment-complexity=medium:fragment-steps=5: FPS: 480 帧时间:2.083 毫秒 [循环] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 482 帧时间:2.075 毫秒 [循环] fragment-steps=5:fragment-uniform=false:vertex-steps=5:FPS:479 帧时间:2.088 毫秒 [循环] fragment-steps=5:fragment-uniform=true:vertex-steps=5:FPS:483 帧时间:2.070 毫秒 =========================================================== glmark2 得分:434
现在,让我们将其与下一个结果进行比较:
//使用“性能”调节器测试,使用电池运行,ignore_ppc 没有变化 rodolfo@rodolfo-Aspire-A515-41G:~$ DRI_PRIME=1 glmark2 ========================================================= glmark2 2014.03+git20150611.fa71af2d ============================================================= OpenGL 信息 GL_VENDOR:X.Org GL_RENDERER:Radeon 500 系列(POLARIS12 / DRM 3.23.0 / 4.15.0-38-generic, LLVM 6.0.0) GL_VERSION:3.0 Mesa 18.0.5 =========================================================== [build] use-vbo=false:FPS:443 帧时间:2.257 毫秒 [build] use-vbo=true:FPS:492 帧时间:2.033 毫秒 [纹理] 纹理过滤器=nearest:FPS:482 帧时间:2.075 毫秒 [纹理] 纹理过滤器=linear:FPS:484 帧时间:2.066 毫秒 [纹理] 纹理过滤器=mipmap:FPS:482 帧时间:2.075 毫秒 [阴影] 阴影=gouraud:FPS:487 帧时间: 2.053 毫秒 [阴影] 阴影=blinn-phong-inf:FPS:489 帧时间:2.045 毫秒 [阴影] 阴影=phong:FPS:482 帧时间:2.075 毫秒 [阴影] 阴影=cel:FPS:483 帧时间:2.070 毫秒 [凹凸] 凹凸渲染=high-poly:FPS:455 帧时间:2.198 毫秒 [凹凸] 凹凸渲染=normals:FPS:495 帧时间:2.020 毫秒 [凹凸] 凹凸渲染=height:FPS:494 帧时间:2.024 毫秒 [effect2d] kernel=0,1,0;1,-4,1;0,1,0;:FPS:460 帧时间:2.174 毫秒 [effect2d]内核=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;:FPS:354 帧时间:2.825 毫秒 [pulsar] 光=false:quads=5:纹理=false:FPS:485 帧时间:2.062 毫秒 [桌面] blur-radius=5:效果=blur:passes=1:separable=true:windows=4:FPS:346 帧时间:2.890 毫秒 [桌面] 效果=shadow:windows=4:FPS:455 帧时间:2.198 毫秒 [缓冲区] 列=200:交错=false:更新分散=0.9:更新分数=0.5:更新方法=映射:FPS:212 帧时间:4.717 毫秒 [缓冲区]列=200:交错=false:更新分散=0.9:更新分数=0.5:更新方法=子数据:FPS:247 帧时间:4.049 毫秒 [缓冲区] 列=200:交错=true:更新分散=0.9:更新分数=0.5:更新方法=地图:FPS:298 帧时间:3.356 毫秒 [想法] 速度=持续时间:FPS:485 帧时间:2.062 毫秒 [水母]:FPS:447 帧时间:2.237 毫秒 [地形]:FPS:119 帧时间:8.403 毫秒 [阴影]:FPS:474 帧时间:2.110 毫秒 [折射]:FPS:247 帧时间:4.049 毫秒[条件] fragment-steps=0:vertex-steps=0: FPS: 489 帧时间:2.045 毫秒 [条件] fragment-steps=5:vertex-steps=0: FPS: 480 帧时间:2.083 毫秒 [条件] fragment-steps=0:vertex-steps=5: FPS: 487 帧时间:2.053 毫秒 [功能] fragment-complexity=low:fragment-steps=5: FPS: 482 帧时间:2.075 毫秒 [功能] fragment-complexity=medium:fragment-steps=5: FPS: 366 帧时间:2.732 毫秒 [循环] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 477 帧时间:2.096 毫秒 [循环] fragment-steps=5:fragment-uniform=false:vertex-steps=5:FPS:478 帧时间:2.092 毫秒 [循环] fragment-steps=5:fragment-uniform=true:vertex-steps=5:FPS:482 帧时间:2.075 毫秒 =========================================================== glmark2 得分:428
简而言之,所有这些额外的麻烦都只是为了 6 点的性能差异。即使这是值得的,至少可以说,Linux Mint 19 给你带来了多大的噩梦,只是因为你希望你的笔记本电脑在放电时能像它应该的那样运行。你认为你的发行版有什么不同吗?我敢打赌没有。现在,很容易出去告诉你的朋友和互联网“哦,Linux 比 Windows 好”,但事实并非如此。笔记本电脑的这个问题已经存在好几年了!我亲眼见过:从 2013 年、2012 年、2010 年一直到 2007 年的主题!许多发行版来了又去,他们没有触及这个问题,因为他们只是不想修复它。即使他们做了,也是荒谬的:如果没有 GUI 来处理系统文件和属性,他们怎么会希望更多的人使用 Linux 发行版?和手机相比,Linux 发行版还有很长的路要走:你可以用手机玩游戏,直到电池耗尽。它不会强迫你处理 cpupower、cpufrequency、cpufreq 等问题。Windows 也不会,这就是为什么如果我想玩游戏,我仍然需要在机器上进行双启动。在 Windows 上,你只需点击几下即可。“好了,我想在使用电池时获得 MAX 性能”。搞定。它完成了工作。
“哦,但你为什么抱怨 Linux,难道你没有得到你期望的结果吗?”不!我的笔记本电脑在充电时会破坏这些结果!换句话说,经过这么长时间,我得到的只是一个错误的解决方案。它只是告诉你你提高了 CPU 频率,而不是系统整体性能。这就是我要说的:
//笔记本电脑正在充电,“性能”调节器,ignore_ppc 没有变化 rodolfo@rodolfo-Aspire-A515-41G:~$ DRI_PRIME=1 glmark2 ========================================================= glmark2 2014.03+git20150611.fa71af2d ============================================================= OpenGL 信息 GL_VENDOR:X.Org GL_RENDERER:Radeon 500 系列(POLARIS12 / DRM 3.23.0 / 4.15.0-38-generic, LLVM 6.0.0) GL_VERSION:3.0 Mesa 18.0.5 =========================================================== [build] use-vbo=false:FPS:595 帧时间:1.681 毫秒 [build] use-vbo=true:FPS:668 帧时间:1.497 毫秒 [纹理] 纹理过滤器=nearest:FPS:649 帧时间:1.541 毫秒 [纹理] 纹理过滤器=linear:FPS:651 帧时间:1.536 毫秒 [纹理] 纹理过滤器=mipmap:FPS:649 帧时间:1.541 毫秒 [着色] 着色=gouraud:FPS:665 帧时间: 1.504 毫秒 [阴影] 阴影=blinn-phong-inf:FPS:665 帧时间:1.504 毫秒 [阴影] 阴影=phong:FPS:666 帧时间:1.502 毫秒 [阴影] 阴影=cel:FPS:666 帧时间:1.502 毫秒 [凹凸] 凹凸渲染=high-poly:FPS:672 帧时间:1.488 毫秒 [凹凸] 凹凸渲染=normals:FPS:672 帧时间:1.488 毫秒 [凹凸] 凹凸渲染=height:FPS:666 帧时间:1.502 毫秒 [effect2d] kernel=0,1,0;1,-4,1;0,1,0;:FPS:661 帧时间:1.513 毫秒 [effect2d]内核=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;:FPS:651 帧时间:1.536 毫秒 [pulsar] 光=false:quads=5:纹理=false:FPS:637 帧时间:1.570 毫秒 [桌面] blur-radius=5:效果=blur:passes=1:separable=true:windows=4:FPS:617 帧时间:1.621 毫秒 [桌面] 效果=shadow:windows=4:FPS:634 帧时间:1.577 毫秒 [缓冲区] 列=200:交错=false:更新分散=0.9:更新分数=0.5:更新方法=映射:FPS:239 帧时间:4.184 毫秒 [缓冲区]列=200:交错=false:更新分散=0.9:更新分数=0.5:更新方法=子数据:FPS:265 帧时间:3.774 毫秒 [缓冲区] 列=200:交错=true:更新分散=0.9:更新分数=0.5:更新方法=地图:FPS:294 帧时间:3.401 毫秒 [想法] 速度=持续时间:FPS:587 帧时间:1.704 毫秒 [水母]:FPS:613 帧时间:1.631 毫秒 [地形]:FPS:411 帧时间:2.433 毫秒 [阴影]:FPS:661 帧时间:1.513 毫秒 [折射]:FPS:552 帧时间:1.812 毫秒[条件] fragment-steps=0:vertex-steps=0: FPS: 646 帧时间:1.548 毫秒 [条件] fragment-steps=5:vertex-steps=0: FPS: 633 帧时间:1.580 毫秒 [条件] fragment-steps=0:vertex-steps=5: FPS: 644 帧时间:1.553 毫秒 [功能] fragment-complexity=low:fragment-steps=5: FPS: 627 帧时间:1.595 毫秒 [功能] fragment-complexity=medium:fragment-steps=5: FPS: 629 帧时间:1.590 毫秒 [循环] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 635 帧时间:1.575 毫秒 [循环] fragment-steps=5:fragment-uniform=false:vertex-steps=5:FPS:629 帧时间:1.590 毫秒 [循环] fragment-steps=5:fragment-uniform=true:vertex-steps=5:FPS:627 帧时间:1.595 毫秒 =========================================================== glmark2 得分:599
总之,如果你想在笔记本电脑上玩游戏,我不建议在笔记本电脑上使用 Linux。这绝对是一种令人沮丧的体验。这不是我发泄沮丧的说辞,这是事实。也许 2037 年再来看看他们是否会开发一个 GUI 来处理 cpupower、cpufreq、整体系统性能等。但我对此非常怀疑。