CPU frequency scaling (Português)

From ArchWiki
Revision as of 20:34, 19 June 2019 by Josephgbr (talk | contribs) (Veja também: Translation)
Jump to navigation Jump to search

Tango-preferences-desktop-locale.pngEsse artigo ou seção precisa de tradução.Tango-preferences-desktop-locale.png

Notas: Este artigo está sendo traduzido. (Discuta na Talk:CPU frequency scaling (Português)#)

A escala de frequência da CPU permite que o sistema operacional aumente ou diminua a frequência da CPU para economizar energia. Frequências de CPU podem ser escalonadas automaticamente dependendo da carga do sistema, em resposta a eventos ACPI, ou manualmente por programas espaço do usuário.

O escalonamento de frequência da CPU é implementado no kernel do Linux, a infraestrutura é chamada de cpufreq. Desde o kernel 3.4, os módulos necessários são carregados automaticamente e o governador ondemand[broken link: invalid section] recomendado é ativado por padrão. No entanto, as ferramentas de espaço do usuário, como cpupower, acpid, Laptop Mode Tools ou ferramentas GUI fornecidas para o seu ambiente de área de trabalho, ainda podem ser usadas para configuração avançada.

Ferramentas de espaço do usuário

thermald

thermaldAUR é um daemon do Linux usado para evitar o superaquecimento de plataformas. Esse daemon monitora a temperatura e aplica compensação usando os métodos de resfriamento disponíveis.

Por padrão, ele monitora a temperatura da CPU usando sensores de temperatura digital da CPU disponíveis e mantém a temperatura da CPU sob controle, antes que o hardware execute uma ação de correção agressiva. Se houver um sensor de temperatura da pele em sysfs térmicos, ele tentará manter a temperatura da pele abaixo de 45°C.

A unit de systemd associada é thermald.service, que deve ser iniciada e habilitada.

i7z

i7z é uma ferramenta de relatório de CPUs i7 (e agora i3, i5) para o Linux. Pode ser iniciada de um Terminal com o comando i7z ou como interface gráfica com i7z-gui.

cpupower

O cpupower é um conjunto de utilitários do espaço de usuário projetado para auxiliar no dimensionamento de frequência da CPU. O pacote não é necessário para usar o escalonamento, mas é altamente recomendado porque ele fornece utilitários de linha de comando úteis e um serviço systemd para alterar o gerenciador na inicialização.

O arquivo de configuração do cpupower encontra-se em /etc/default/cpupower. Esse arquivo de configuração é lido por um script em bash em /usr/lib/systemd/scripts/cpupower que é ativado por systemd com cpupower.service. Você pode querer habilitar cpupower.service para iniciar na inicialização.

Drivers de frequência de CPU

Nota:
  • O módulo nativo da CPU é carregado automaticamente.
  • O driver de escala de energia pstate é usado automaticamente para CPUs Intel modernas, em vez dos outros drivers abaixo. Este driver tem prioridade sobre outros drivers e é embutido em vez de ser um módulo. Este driver é usado automaticamente para o Sandy Bridge e CPUs mais recentes. Se você encontrar um problema ao usar este driver, adicione intel_pstate=disable à sua linha do kernel. Você pode usar os mesmos utilitários de espaço do usuário com este driver, mas não pode controlá-lo.
  • Mesmo o comportamento do estado P mencionado acima pode ser influenciado com /sys/devices/system/cpu/intel_pstate, por exemplo, o Intel Turbo Boost pode ser desativado com # echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo para manter baixas as temperaturas da CPU.
  • Controle adicional para os modernos processadores da Intel está disponível com o Linux Thermal Daemon (disponível como thermaldAUR), que proativamente controla a térmica usando estados P, estados T e o driver da clamp de energia da Intel. Thermald também pode ser usado para CPUs Intel mais antigas. Se os drivers mais recentes não estiverem disponíveis, o daemon será revertido para registros específicos do modelo x86 e o "subsistema cpufreq" do Linux para controlar o resfriamento do sistema.

cpupower requer módulos para conhecer os limites da CPU nativa:

Módulo Descrição
intel_pstate Esse driver implementa um driver de escalonamento com um controlador interno para processadores Intel Core (Sandy Bridge e mais recentes).
acpi-cpufreq Driver CPUFreq que utiliza os estados de desempenho do processador ACPI. Este driver também possui suporte ao Intel Enhanced SpeedStep (anteriormente com suporte pelo módulo speedstep-centrino obsoleto).
speedstep-lib Driver CPUFreq para processadores habilitados para Intel SpeedStep (principalmente Atoms e Pentiums mais antigos (até III))
powernow-k8 Driver CPUFreq para processadores K8/K10 Athlon 64/Opteron/Phenom. Desde o Linux 3.7, "acpi-cpufreq" será automaticamente usado para CPUs mais modernas desta família.
pcc-cpufreq Este controlador possui suporte a interface de Processing Clocking Control da Hewlett-Packard e Microsoft Corporation, que é útil em alguns servidores ProLiant.
p4-clockmod Driver CPUFreq para processadores Intel Pentium 4/Xeon/Celeron que reduz a temperatura da CPU, ignorando os relógios. (Você provavelmente deseja usar um driver SpeedStep).

Para ver uma lista completa de módulos disponíveis, execute:

$ ls /usr/lib/modules/$(uname -r)/kernel/drivers/cpufreq/

Carregue o módulo apropriado (veja Módulos de kernel para detalhes). Depois que o driver cpufreq apropriado é carregado, informações detalhadas sobre a(s) CPU(s) podem ser exibidas executando

$ cpupower frequency-info

Configurando frequências máxima e mínima

Em casos raros, pode ser necessário definir manualmente as frequências máxima e mínima.

Para definir a frequência máxima do relógio (freq_do_clock é uma frequência de relógio com unidades: GHz, MHz):

# cpupower frequency-set -u freq_do_clock

Para definir uma frequência de clock mínima:

# cpupower frequency-set -d freq_do_clock

Para definir a CPU para executar em uma frequência especificada:

# cpupower frequency-set -f freq_do_clock
Nota:
  • Para ajustar apenas para um único core de CPU, acrescente -c número_do_core.
  • As frequências máxima e mínima do governador podem ser definidas em /etc/default/cpupower.

Escalonando governadores

Os governadores (veja a tabela abaixo) são esquemas de energia para a CPU. Apenas um pode estar ativo de cada vez. Para detalhes, veja a documentação do kernel na fonte do kernel.

Governador Descrição
performance Executa a CPU na frequência máxima.
powersave Executa a CPU na frequência mínima.
userspace Execute a CPU nas frequências especificadas pelo usuário.
ondemand Escalona a frequência dinamicamente conforme a carga atual. Pula para a frequência mais alta e então volta conforme o tempo de ociosidade aumenta.
conservative Escalona a frequência dinamicamente conforme a carga atual. Escalona a frequência de forma mais gradual que o "ondemand".
schedutil Seleção de frequência da CPU controlada pelo agendador [1], [2].

Dependendo do driver de escalonamento, um dos governadores serão carregados por padrão:

  • ondemand para CPUs AMD e Intel mais antigos.
  • powersave para CPUs Intel mais novas usando o driver intel_pstate (Sandy Bridge e mais novas).
Nota: O driver intel_pstate possui suporte apenas aos governadores de desempenho e de economia de energia, mas ambos fornecem escalonamento dinâmico. O governador de desempenho deve oferecer melhor funcionalidade de economia de energia do que o antigo controlador "ondemand".
Atenção: Use as ferramentas de monitoramento da CPU (para temperaturas, voltagens, etc.) ao alterar o governador padrão.

Para ativar um governador em particular, execute:

# cpupower frequency-set -g governador
Nota:
  • Para ajustar apenas para um único core de CPU, acrescente -c número_do_core ao comando acima.
  • A ativação de um governador requer que um módulo de kernel específico (chamado cpufreq_governador) esteja carregado. Desde o kernel 3.4, esses módulos são carregados automaticamente.

Alternativamente, você pode ativar um governador a cada CPU disponível manualmente com:

# echo governador > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

sendo governador o nome do governador, relacionado na tabela acima, que você deseja ativar.

Dica: Para monitorar a velocidade de CPU em tempo real, execute:
$ watch grep \"cpu MHz\" /proc/cpuinfo

Ajustando o governador ondemand

Veja a documentação do kernel para detalhes.

Trocando o limite

Para definir o limite (threshold) para avançar para outra frequência:

# echo -n percentagem > /sys/devices/system/cpu/cpufreq/<governador>/up_threshold

Para definir o limite para retroceder para outra frequência:

# echo -n percentagem > /sys/devices/system/cpu/cpufreq/<governador>/down_threshold

Taxa de amostragem

A taxa de amostragem determina com que frequência o controlador verifica a sintonia da CPU. sampling_down_factor é um ajuste que multiplica a taxa de amostragem quando a CPU está com a frequência de clock mais alta, atrasando a avaliação da carga e melhorando o desempenho. Os valores permitidos para sampling_down_factor são de 1 a 100.000. Esse ajuste não tem efeito sobre o comportamento em frequências/cargas de CPU mais baixas.

Para ler o valor (padrão = 1), execute:

$ cat /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor

Para definir o valor, execute:

# echo -n valor > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor

Tornar as alterações permanentes

Para que o escalonamento desejado seja habilitado na inicialização, opções de módulo do kernel e systemd (Português)#Arquivos temporários são métodos regulares. No entanto, em alguns casos, pode haver condições de corrida, conforme observado em systemd (Português)#Arquivos temporários. udev está indo melhor.

Por exemplo, para configurar o controlador de escala do núcleo da CPU 0 para desempenho enquanto o driver de escala for acpi_cpufreq, crie a seguinte regra de udev:

/etc/udev/rules.d/50-scaling-governor.rules
SUBSYSTEM=="module", ACTION=="add", KERNEL=="acpi_cpufreq", RUN+="/bin/sh -c 'echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor'"

Para ter a regra já aplicada no initramfs, siga o exemplo em udev#Debug output.

Dica: Alternativamente, configure o utilitário cpupower e habilite seu serviço de systemd.

Interação com eventos da ACPI

Os usuários podem configurar os governadores de escala para alternar automaticamente com base em diferentes eventos ACPI, como conectar o adaptador AC ou fechar uma tampa do laptop. Um exemplo rápido é dado abaixo, no entanto, pode valer a pena ler o artigo completo sobre acpid.

Eventos são definidos em /etc/acpi/handler.sh. Se o pacote acpid estiver instalado, o arquivo já deverá existir e ser executável. Por exemplo, para alterar o governador de escala de performance para conservative quando o adaptador de CA for desconectado e alterá-lo de volta, se reconectar:

/etc/acpi/handler.sh
[...]

ac_adapter)
    case "$2" in
        AC*)
            case "$4" in
                00000000)
                    echo "conservative" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                    echo -n $minspeed >$setspeed
                    #/etc/laptop-mode/laptop-mode start
                ;;
                00000001)
                    echo "performance" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                    echo -n $maxspeed >$setspeed
                    #/etc/laptop-mode/laptop-mode stop
                ;;
            esac
        ;;
        *) logger "ACPI action undefined: $2" ;;
    esac
;;

[...]

Concessão de privilégios no GNOME

Nota: systemd introduziu o logind que lida com ações consolekit e policykit. O código a seguir não funciona. Com logind, basta editar no arquivo /usr/share/polkit-1/actions/org.gnome.cpufreqselector.policy os elementos <defaults> conforme a suas necessidades e o manual do polkit [3].

GNOME tem um miniaplicativo legal para mudar o governador na hora. Para usá-lo sem a necessidade de inserir a senha de root, basta criar o seguinte arquivo:

/var/lib/polkit-1/localauthority/50-local.d/org.gnome.cpufreqselector.pkla
[org.gnome.cpufreqselector]
Identity=unix-user:usuário
Action=org.gnome.cpufreqselector
ResultAny=no
ResultInactive=no
ResultActive=yes

sendo usuário o nome de usuário interessado.

O pacote desktop-privilegesAUR no AUR contém um arquivo .pkla para autorizar todos os usuários do grupo de usuários power para alterar o governador.

Solução de problemas

  • Alguns aplicativos, como ntop, não respondem bem ao escalonamento automático de frequência. No caso de ntop, isso pode resultar em falhas de segmentação e muitas informações perdidas, pois mesmo o governador on-demand não pode alterar a frequência com rapidez suficiente quando muitos pacotes chegam de repente à interface de rede monitorada que não pode ser manipulado pela velocidade atual do processador.
  • Algumas CPUs podem sofrer um desempenho ruim com as configurações padrão do governador on-demand (por exemplo, vídeos em flash que não reproduzem suavemente ou animações instáveis de janelas). Em vez de desativar completamente o escalonamento de frequência para resolver esses problemas, a agressividade do escalonamento de frequência pode ser aumentada diminuindo a variável up_threshold do sysctl para cada CPU. Veja como alterar o limite do governador sob demanda.
  • Às vezes, o governador sob demanda pode não acelerar até a frequência máxima, mas um passo abaixo. Isto pode ser resolvido ajustando o valor de max_freq para ligeiramente mais alto que o máximo real. Por exemplo, se a faixa de frequência da CPU for de 2,00 GHz a 3,00 GHz, configurar max_freq para 3,01 GHz pode ser uma boa ideia.
  • Algumas combinações de drivers e chips de som ALSA podem causar saltos de áudio enquanto o governador muda entre as frequências, e a mudança de volta para um governador que não muda muda a parada do áudio.

Limitação de frequências da BIOS

Algumas configurações de CPU/BIOS podem ter dificuldades para escalar até a frequência máxima ou escalar para frequências mais altas. Isso é provavelmente causado por eventos do BIOS dizendo ao sistema operacional para limitar a frequência resultando em /sys/devices/system/cpu/cpu0/cpufreq/bios_limit definido como um valor mais baixo.

Ou você acabou de fazer uma configuração específica no utilitário de configuração da BIOS (frequência, gerenciamento térmico, etc.), você pode culpar uma BIOS com bugs/desatualizada ou a BIOS pode ter uma razão séria para limitar a CPU por conta própria.

Razões como essa podem ser (supondo que sua máquina seja um notebook) que a bateria está desconectada (ou quase no fim da vida útil), então você está apenas em energia da fonte de alimentação. Neste caso, uma fonte de alimentação fraca pode não fornecer eletricidade suficiente para atender às demandas de pico extremo pelo sistema geral e, como não há bateria para ajudar, isso pode levar à perda de dados, corrupção de dados ou, no pior dos casos, até mesmo danos ao hardware!

Nem todos as BIOS limitam a frequência da CPU neste caso, mas, por exemplo, a maioria dos thinkpads IBM/Lenovo. Consulte thinkwiki para obter mais informações relacionadas a thinkpad sobre este tópico.

Se você verificou que não há apenas uma configuração estranha do BIOS e sabe o que está fazendo, pode fazer com que o Kernel ignore essas limitações do BIOS.

Atenção: Certifique-se de ler e entender a seção acima. A limitação de frequência da CPU é um recurso de segurança da sua BIOS e você não deve precisar contorná-la.

Um parâmetro especial deve ser passado para o módulo do processador.

Para tentar isso temporariamente, alerte o valor em /sys/module/processor/parameters/ignore_ppc de 0 para 1.

Para definir permanentemente, Kernel modules#Setting module options descreve alternativas. Por exemplo, você pode adicionar processor.ignore_ppc=1 à sua linha de inicialização de kernel ou crie

/etc/modprobe.d/ignore_ppc.conf
# Se a frequência de sua máquina for limitada de forma errada pela BIOS, isso deve ajudar
options processor ignore_ppc=1

Veja também