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.

Status de tradução: Esse artigo é uma tradução de CPU frequency scaling. Data da última tradução: 2020-06-19. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

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 regulador ondemand 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

thermald é 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 . Esse arquivo de configuração é lido por um script em bash em que é ativado por systemd com . Você pode querer habilitar para iniciar na inicialização.

cpupower-gui

é um utilitário gráfico desenvolvido para auxiliar no dimensionamento da frequência da CPU. A GUI é baseada em GTK e deve fornecer as mesmas opções que cpupower. O cpupower-gui pode alterar a frequência e o regulador máximo/mínimo da CPU para cada núcleo. O aplicativo manipula a concessão de privilégios por meio do polkit e permite que qualquer usuário do grupo de usuários wheel altere a frequência e o regulador.

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 como usuário root 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 thermald), 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óduloDescrição
intel_pstateEsse driver implementa um driver de escalonamento com um controlador interno para processadores Intel Core (Sandy Bridge e mais recentes).
acpi-cpufreqDriver 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-libDriver CPUFreq para processadores habilitados para Intel SpeedStep (principalmente Atoms e Pentiums mais antigos (até III))
powernow-k8Driver 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-cpufreqEste controlador possui suporte a interface de Processing Clocking Control da Hewlett-Packard e Microsoft Corporation, que é útil em alguns servidores ProLiant.
p4-clockmodDriver 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 alguns casos, pode ser necessário definir manualmente as frequências máxima e mínima.

Para definir a frequência máxima do relógio ( é 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

Alternativamente, você pode definir a frequência manualmente:

# echo valor > /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq

Os valores disponíveis podem ser definidos em ou similar.

intel_pstate

# echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

acpi-cpufreq

  1. echo 0 > /sys/devices/system/cpu/cpufreq/boost

x86_energy_perf_policy

Com :

# x86_energy_perf_policy --turbo-enable 0

Escalonando reguladores

Os reguladores (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.

ReguladorDescrição
performanceExecuta a CPU na frequência máxima.
powersaveExecuta a CPU na frequência mínima.
userspaceExecute a CPU nas frequências especificadas pelo usuário.
ondemandEscalona 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.
conservativeEscalona a frequência dinamicamente conforme a carga atual. Escalona a frequência de forma mais gradual que o "ondemand".
schedutilSeleção de frequência da CPU controlada pelo agendador , .

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

  • para CPUs AMD e Intel mais antigos.
  • para CPUs Intel mais novas usando o driver (Sandy Bridge e mais novas).

Para ativar um regulador em particular, execute:

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

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

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

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

Ajustando o regulador 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/<regulador>/up_threshold

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

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

Taxa de amostragem

A taxa de amostragem determina com que frequência o controlador verifica a sintonia da CPU. é 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 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)#systemd-tmpfiles - arquivos temporários são métodos regulares.

Por exemplo, alterar o up_threshold para 10:

No entanto, em alguns casos, pode haver condições de corrida, conforme observado em systemd (Português#systemd-tmpfiles - arquivos temporários, podem existir e é possível usar o udev para evitá-los.

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

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

Interação com eventos da ACPI

Os usuários podem configurar os reguladores 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 estiver instalado, o arquivo já deverá existir e ser executável. Por exemplo, para alterar o regulador de escala de performance para quando o adaptador de CA for desconectado e alterá-lo de volta, se reconectar:

Concessão de privilégios no GNOME

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

sendo o nome de usuário interessado.

O pacote no AUR contém um arquivo para autorizar todos os usuários do grupo de usuários para alterar o regulador.

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 regulador 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 regulador 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 regulador sob demanda.
  • Às vezes, o regulador 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 regulador muda entre as frequências, e a mudança de volta para um regulador 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 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 de para .

Para definir permanentemente, Módulos de kernel#Opções de configuração de módulos descreve alternativas. Por exemplo, você pode adicionar à sua linha de inicialização de kernel ou crie

Veja também

gollark: ++DELETE CHILDREN
gollark: no.
gollark: `int** LyricLy = (char)125`
gollark: Well, if you just implement the existing EWO protocol the existing clients will keep working.
gollark: Although this doesn't say anything about firefox so maybe lyricbad?
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.