A escala de frequência não funciona mais após a atualização do kernel

0

Usando o kernel 3.13.0-37, a escala de freqüência da CPU funciona e eu posso controlá-la usando o applet de controle de frequência da CPU.

Eu atualizei para o kernel 3.16.0-38, o applet agora me informa que a escala de frequência da CPU não é suportada.

Eu verifiquei a configuração do kernel, até recompilei o kernel, garantindo que todos os diferentes governadores estejam habilitados.

Então, eu acho que minha pergunta é

Quais configurações do kernel devem ser ativadas para o dimensionamento de frequência funcionar?

Estou executando o Ubuntu 14.04 com o Gnome, e também estou executando o Linux Mint 17.2 com o Cinnamon (sei que este não é um fórum do Mint). O mesmo problema em cada um.

Obrigado por qualquer indicação.

    
por hatterman 26.09.2015 / 15:05

1 resposta

0

Observação: essa NÃO é uma resposta para a pergunta, mas sim uma resposta ao problema raiz real.

O kernel antigo, 3.13.0-37, usava o driver de escalonamento de frequência da CPU acpi-cpufreq por padrão. Aparentemente, esse driver era compatível com qualquer applet de nível mais alto que estivesse sendo usado para controlar o escalonamento de frequência da CPU.

O kernel mais novo, 3.16.0-38. Usou o driver de escala de frequência da CPU intel_pstate por padrão. Aparentemente, esse driver NÃO é compatível com o applet de nível mais alto que estava sendo usado para controlar a escala de frequência da CPU. A informação era enganosa, e a pergunta foi feita com base na crença de que não havia escala de frequência quando realmente havia.

O driver intel_pstate teve um histórico problemático, com erros muitas vezes muito ruins. Por um tempo, foi desativado por padrão no Ubuntu. Mais recentemente (no último ano), o foi ativado por padrão novamente. Pessoalmente, acho que ainda há vários problemas com o driver intel_pstate (e esse é o meu foco há muito tempo).

Pode-se substituir o driver de ajuste padrão por meio da linha GRUB_CMDLINE_LINUX_DEFAULT em /etc/default/grub . Por exemplo (inclui algumas outras coisas que eu uso):

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 intel_pstate=disable net.ifnames=1 biosdevname=0 crashkernel=384M-:128M"

ou:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 intel_pstate=enable net.ifnames=1 biosdevname=0 crashkernel=384M-:128M"

lembre-se sempre (raramente me lembro) de:

sudo update-grub

depois.

Muitos usuários reclamam que as freqüências de CPU são muito altas com o driver intel_pstate. Em muitos casos, é verdade. No entanto, é preciso também observar os estados C (vários níveis de inatividade) para realmente saber o que está acontecendo com o processador e se eles devem estar preocupados ou não. À medida que os processadores estão evoluindo e os estados C mais profundos estão disponíveis, às vezes usando uma frequência de CPU mais alta para uma tarefa e, em seguida, entrando em um estado C mais profundo, pode resultar em menos consumo geral de energia. Essa é uma das razões pelas quais o mantenedor original do driver intel_pstate usou o nome powersave para o governor principal, que é grosseiramente e aproximadamente o equivalente do regulador acpi-cpufreq ondemand . A nomenclatura do governador é uma fonte de confusão para muitos usuários.

De qualquer forma, uma ferramenta recomendada para obter feedback sobre estados C e tal é o turbostato. Eu não consigo me lembrar de qual pacote contém o turbostat, porque eu sempre o compilo da fonte do kernel. Exemplo de corrida com turbocompressor:

$ 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

Meu processador i7 só vai para o nível C6, mas perceba quanto tempo está passando lá, acima de 99%. Assim, o consumo de energia é muito baixo em 3,9 watts para o pacote, porque a maioria dos meus processadores estão em estado ocioso profundo.

Espero que isso ajude.

Editar: um exemplo de compilação de turbostato:
Primeiro, eu nunca consigo lembrar onde está:

doug@s15:~$ locate turbostat.c
/home/doug/temp-k-git/linux/tools/power/x86/turbostat/turbostat.c

Em segundo lugar, vá lá e compile:

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

Em terceiro lugar, coloque onde eu sempre uso:

doug@s15:~/temp-k-git/linux/tools/power/x86/turbostat$ cp turbostat ~/temp/
    
por Doug Smythies 29.09.2015 / 20:11