使用内核 3.13.0-37,CPU 频率缩放可以工作,我可以使用 CPU 频率控制小程序对其进行控制。
我已经升级到内核 3.16.0-38,小程序现在通知我不支持 CPU 频率调整。
我已经检查了内核配置,甚至重新编译了内核,确保所有不同的调节器都已启用。
所以我想我的问题是
必须启用哪些内核设置才能使频率调节起作用?
我在运行带有 Gnome 的 Ubuntu 14.04,也在运行带有 Cinnamon 的 Linux Mint 17.2(我知道这不是 Mint 论坛)。两者都有同样的问题。
谢谢您的指点。
答案1
注意:这不是对问题的回答,而是对实际根本问题的回应。
旧内核 3.13.0-37 默认使用 acpi-cpufreq CPU 频率调节驱动程序。显然,该驱动程序与用于控制 CPU 频率调节的任何更高级别的小程序兼容。
较新的内核 3.16.0-38 默认使用 intel_pstate CPU 频率调节驱动程序。显然,该驱动程序与用于控制 CPU 频率调节的任何高级小程序都不兼容。这些信息具有误导性,提出这个问题是基于认为没有频率调节,而实际上有。
intel_pstate 驱动程序存在问题,有时会出现非常严重的错误。有一段时间默认禁用在 Ubuntu 中。最近(去年)它已默认启用再次。我个人认为 intel_pstate 驱动程序仍然存在多个问题(并且这已经是我关注了很长时间的焦点)。
可以通过GRUB_CMDLINE_LINUX_DEFAULT
中的行覆盖默认的缩放驱动程序/etc/default/grub
。例如(包括我使用的一些其他东西):
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 intel_pstate=disable net.ifnames=1 biosdevname=0 crashkernel=384M-:128M"
或者:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 intel_pstate=enable net.ifnames=1 biosdevname=0 crashkernel=384M-:128M"
永远记住(我很少记得):
sudo update-grub
然后。
很多用户抱怨使用 intel_pstate 驱动程序时 CPU 频率过高。在很多情况下确实如此。但是,用户还需要查看 C 状态(各种空闲级别),才能真正了解处理器的运行情况,并决定是否应该担心。随着处理器不断发展,更深的 C 状态也可用,有时在执行任务时使用更高的 CPU 频率,然后尽快进入更深的 C 状态,可以减少整体能耗。这是 intel_pstate 驱动程序的原始维护者使用powersave
主调节器名称的原因之一,该名称大致相当于 acpi-cpufreqondemand
调节器。调节器命名让很多用户感到困惑。
无论如何,推荐使用 turbostat 来获取有关 C 状态等的反馈。我不记得哪个包包含 turbostat,因为我总是自己从内核源代码编译它。示例 turbostat 运行:
$ sudo ./turbostat -d sleep 10
turbostat version 4.7 17-June, 2015 - Len Brown <[email protected]>
CPUID(0): GenuineIntel 13 CPUID levels; family:model:stepping 0x6:2a:7 (6:42:7)
CPUID(6): APERF, DTS, PTM, EPB
RAPL: 690 sec. Joule Counter Range, at 95 Watts
cpu2: MSR_NHM_PLATFORM_INFO: 0x100070012200
16 * 100 = 1600 MHz max efficiency frequency
34 * 100 = 3400 MHz base frequency
cpu2: MSR_IA32_POWER_CTL: 0x0004005d (C1E auto-promotion: DISabled)
cpu2: MSR_TURBO_RATIO_LIMIT: 0x23242526
35 * 100 = 3500 MHz max turbo 4 active cores
36 * 100 = 3600 MHz max turbo 3 active cores
37 * 100 = 3700 MHz max turbo 2 active cores
38 * 100 = 3800 MHz max turbo 1 active cores
cpu2: MSR_NHM_SNB_PKG_CST_CFG_CTL: 0x1e008403 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked: pkg-cstate-limit=3: pc6r)
cpu0: MSR_IA32_ENERGY_PERF_BIAS: 0x00000006 (balanced)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a1003 (0.125000 Watts, 0.000015 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x01e002f8 (95 W TDP, RAPL 60 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x800087f8001487f8 (locked)
cpu0: PKG Limit #1: ENabled (255.000000 Watts, 1.000000 sec, clamp DISabled)
cpu0: PKG Limit #2: ENabled (255.000000 Watts, 0.000977* sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x00621200 (98 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88430000 (31 C)
cpu0: MSR_IA32_THERM_STATUS: 0x88440000 (30 C +/- 1)
cpu1: MSR_IA32_THERM_STATUS: 0x88440000 (30 C +/- 1)
cpu2: MSR_IA32_THERM_STATUS: 0x88420000 (32 C +/- 1)
cpu3: MSR_IA32_THERM_STATUS: 0x88440000 (30 C +/- 1)
Core CPU Avg_MHz %Busy Bzy_MHz TSC_MHz SMI CPU%c1 CPU%c3 CPU%c6 CPU%c7 CoreTmp PkgTmp Pkg%pc2 Pkg%pc3 Pkg%pc6 PkgWatt CorWatt GFXWatt
- - 0 0.03 1606 3411 0 0.13 0.01 99.83 0.00 24 25 2.04 0.00 97.48 3.89 0.28 0.23
0 0 1 0.06 1606 3411 0 0.12 0.02 99.80 0.00 24 25 2.04 0.00 97.48 3.89 0.28 0.23
0 4 0 0.01 1604 3411 0 0.17
1 1 1 0.05 1606 3411 0 0.08 0.02 99.85 0.00 24
1 5 0 0.02 1605 3411 0 0.11
2 2 1 0.04 1607 3411 0 0.17 0.00 99.79 0.00 24
2 6 0 0.01 1605 3411 0 0.20
3 3 0 0.03 1605 3411 0 0.09 0.00 99.89 0.00 24
3 7 0 0.01 1605 3411 0 0.10
10.001485 sec
我的旧款 i7 处理器只能达到 C6 级别,但请注意它在那里花费了多少时间,超过 99%。因此,整个封装的功耗非常低,仅为 3.9 瓦,因为我的 CPU 大部分时间都处于深度空闲状态。
希望这可以帮助。
编辑:编译 turbostat 的一个例子:
首先,我永远记不住它在哪里:
doug@s15:~$ locate turbostat.c
/home/doug/temp-k-git/linux/tools/power/x86/turbostat/turbostat.c
其次,去那里编译它:
doug@s15:~$ cd /home/doug/temp-k-git/linux/tools/power/x86/turbostat
doug@s15:~/temp-k-git/linux/tools/power/x86/turbostat$ make
gcc -Wall -DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"' turbostat.c -o /home/doug/temp-k-git/linux/tools/power/x86/turbostat/turbostat
第三,把它放在我经常使用的地方:
doug@s15:~/temp-k-git/linux/tools/power/x86/turbostat$ cp turbostat ~/temp/