内核升级后频率调节不再起作用

内核升级后频率调节不再起作用

使用内核 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/

相关内容