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/