A performance de um servidor web não depende apenas da largura de banda ou do disco SSD. Um dos fatores mais críticos, mas frequentemente negligenciados, é o gerenciamento de energia da CPU. Em ambientes de Virtual Private Server (VPS) e servidores dedicados, a forma como o kernel do Linux gerencia os clocks dos processadores pode impactar diretamente na latência das requisições HTTP e na capacidade de resposta do servidor web.
O CPU Governor é o subsistema do kernel Linux responsável por ajustar dinamicamente a frequência da CPU. Por padrão, a maioria das distribuições Linux, incluindo o Ubuntu, vem configurada com governadores voltados para o equilíbrio entre performance e consumo de energia em desktops ou laptops. No entanto, servidores web exigem consistência e resposta imediata, características que muitas vezes entram em conflito com a economia de energia agressiva.
Neste tutorial, vamos explorar como verificar, alterar e otimizar o cpu governor no Ubuntu para garantir que seu servidor web opere com máxima eficiência. Vamos cobrir desde a instalação das ferramentas necessárias até a configuração persistente via systemd.
1. Entendendo os Governadores de CPU Disponíveis
Antes de aplicar qualquer configuração, é crucial entender as opções disponíveis no kernel Linux. O subsistema cpufreq oferece vários algoritmos (governors) que determinam como a frequência do processador é ajustada em resposta à carga de trabalho.
Os governadores mais comuns são:
- performance: Mantém a CPU na frequência máxima possível o tempo todo. Minimiza a latência, pois não há overhead de mudança de clock. Ideal para servidores web que precisam responder rapidamente a picos de tráfego.
- powersave: Mantém a CPU na frequência mínima ou ajusta para baixo quando ocioso. Economiza energia, mas introduz latência ao subir o clock sob demanda. Geralmente desaconselhado para servidores de produção crítica.
- ondemand: Aumenta a frequência da CPU imediatamente quando há carga e a reduz quando ociosa. É o padrão na maioria das instalações Ubuntu. Oferece um bom equilíbrio, mas pode sofrer de "thrashing" (oscilação rápida de clock) em cargas variáveis.
- conservative: Similar ao
ondemand, mas aumenta e diminui a frequência de forma mais gradual. Pode ser útil em ambientes onde a latência extrema não é crítica, mas a estabilidade térmica sim. - schedutil: Utiliza o escalonador do kernel (CFS) para decidir a frequência da CPU. É considerado o governador moderno e preferido em kernels mais recentes (5.0+), pois interage melhor com as tarefas do sistema operacional.
Para servidores web, a escolha entre performance e schedutil é geralmente a mais debatida. Enquanto performance garante consistência absoluta, schedutil oferece eficiência moderna com baixa latência.
2. Verificando o Estado Atual da CPU
O primeiro passo para qualquer tunização é diagnosticar o cenário atual. Vamos verificar quais CPUs estão disponíveis e qual governador está sendo usado atualmente.
No Ubuntu, a ferramenta cpupower é a padrão para interagir com o subsistema de frequência. Se você estiver em um VPS, pode ser necessário instalar este pacote primeiro:
sudo apt update
sudo apt install linux-tools-generic linux-tools-$(uname -r)
Para listar todos os governadores suportados pelo seu hardware/kernel, execute:
cpupower frequency-info --governors
Para verificar o governador ativo e a frequência atual em cada núcleo:
cpupower frequency-info
O output mostrará uma linha como current policy: frequency should be within X MHz and Y MHz. The governor "ondemand" may decide.... Isso confirma qual algoritmo está no comando.
3. Alterando o CPU Governor Temporariamente
Para testar a influência do governador na performance do seu servidor web sem perder a configuração atual caso algo dê errado, podemos alterar o valor em tempo real. Esta mudança é volátil e será perdida ao reiniciar o servidor.
Definir todos os núcleos para o modo performance:
sudo cpupower frequency-set -g performance
Alternativamente, se preferir usar o schedutil:
sudo cpupower frequency-set -g schedutil
Você pode verificar a mudança imediatamente com:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
O comando deve retornar o nome do novo governador. Note que você deve repetir esse processo para cada CPU se quiser garantir a uniformidade, embora o comando cpupower acima geralmente aplique a mudança globalmente em sistemas modernos.
4. Tornando a Configuração Persistente
Após testar e decidir que deseja manter uma configuração específica (por exemplo, performance), você precisa torná-la persistente para que ela sobreviva a reinicializações do servidor. A maneira mais robusta no Ubuntu moderno é usar o systemd.
4.1. Criando o Serviço Systemd
Crie um arquivo de serviço personalizado para gerenciar a configuração da CPU. Vamos chamar este serviço de cpu-governor.service.
sudo nano /etc/systemd/system/cpu-governor.service
Insira o seguinte conteúdo no arquivo:
[Unit]
Description=Set CPU Frequency Governor to Performance
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower frequency-set -g performance
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Neste script:
Type=oneshot: Indica que o serviço executa um comando e sai, mas permanece como "ativo" até ser parado explicitamente.ExecStart: Define o comando que será executado na inicialização. Lembre-se de trocarperformancese você preferir outro governador.RemainAfterExit=yes: Permite que o serviço seja parado e iniciado sem executar o comando novamente, apenas alterando o estado lógico do systemd.
4.2. Ativando o Serviço
Salve o arquivo (Ctrl+O, Enter, Ctrl+X no nano) e ative o serviço:
sudo systemctl daemon-reload
sudo systemctl enable cpu-governor.service
sudo systemctl start cpu-governor.service
Agora, verifique se o serviço está ativo e correto:
systemctl status cpu-governor.service
Se tudo estiver em ordem, seu servidor web já estará configurado para usar o governador selecionado após cada boot.
5. Otimizações Adicionais com Tweakings de Kernel
Apenas mudar o governador pode não ser suficiente para maximizar a performance em cenários específicos de I/O ou rede. Vamos ajustar alguns parâmetros do kernel relacionados ao escalonamento e uso de CPU.
5.1. Desativar Intel P-State (se aplicável)
Em algumas configurações antigas, o driver intel_pstate entrava em conflito com o cpufreq padrão. No entanto, em kernels modernos, ele é geralmente preferível ao antigo acpi-cpufreq. Se você estiver usando hardware Intel recente, mantenha o padrão. Para verificar:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
Se retornar intel_pstate, é provável que o schedutil seja a melhor escolha, pois ele foi projetado para trabalhar nativamente com esse driver.
5.2. Ajustando o EAS (Energy Aware Scheduling)
O EAS é um recurso do kernel que permite ao escalonador levar em conta o consumo de energia e a performance ao distribuir tarefas entre núcleos grandes e pequenos (em arquiteturas big.LITTLE ou modernas CPUs Intel/AMD). Para servidores web, muitas vezes desejamos forçar o uso dos núcleos de alta performance.
Você pode verificar se o EAS está habilitado lendo:
cat /sys/devices/system/cpu/sched_smt_power_semi
Não há um "tweak" universal aqui, mas entender que seu servidor está distribuindo cargas de trabalho pode ajudar a diagnosticar picos de latência. Se você notar que threads críticos estão sendo migrados para núcleos de baixa frequência, considerar o uso de cgroups ou taskset para fixar processos web (como Nginx ou Apache workers) em núcleos específicos pode ser uma estratégia avançada de tuning.
6. Testando a Performance Após a Configuração
Agora que o servidor está configurado, é hora de validar as melhorias. Use ferramentas de benchmarking padrão do mercado para medir a diferença.
6.1. Benchmark de CPU Simples
O sysbench é uma ferramenta leve e eficaz:
sudo apt install sysbench
sysbench cpu run
Anote o tempo total de execução e o número de eventos processados por segundo. Compare com os resultados anteriores (se você os tiver registrado).
6.2. Benchmark de Servidor Web
Se seu servidor web estiver rodando localmente, use o ab (Apache Bench) ou wrk para simular requisições:
sudo apt install apache2-utils
ab -n 1000 -c 100 http://localhost/
Observe a métrica Requests per second. Uma configuração de CPU adequada deve reduzir o tempo médio de resposta e aumentar a taxa de requisições, especialmente sob carga concorrente.
7. Considerações Finais sobre Custos e Recursos
É importante ressaltar que mudar para o governador performance aumenta o consumo de energia e, potencialmente, a geração de calor. Em ambientes de nuvem (VPS), isso geralmente não impacta sua conta diretamente, pois você paga pelo recurso alocado (vCPU/RAM) e não pelo watt consumido. No entanto, em servidores bare-metal ou dedicados, o aumento térmico pode exigir ventilação mais agressiva.
Além disso, em arquiteturas de virtualização, o hypervisor já gerencia a alocação de ciclos de CPU. Em alguns casos (como AWS EC2 ou Google Cloud), o "turbo boost" pode ser limitado ou não disponível para instâncias específicas. Sempre verifique a documentação do seu provedor de VPS sobre limitações de CPU.
O uso do governador schedutil tem ganhado popularidade como o novo padrão ouro para servidores Linux, oferecendo uma combinação inteligente entre resposta rápida e eficiência energética, aproveitando as melhorias modernas no escalonador do kernel. Para a maioria dos administradores que buscam um equilíbrio seguro sem microgerenciamento complexo, migrar de ondemand para schedutil é um ganho de performance gratuito.
Lembre-se: nenhuma configuração de software substitui hardware adequado. Se seu servidor web está constantemente sobrecarregado, o tuning de CPU é apenas uma solução paliativa. Avalie sempre a necessidade de escalar verticalmente (mais vCPUs) ou horizontalmente (load balancers) antes de depender excessivamente de otimizações de baixo nível.
A aplicação correta do cpu governor é um exercício simples de sysadmin que pode resultar em ganhos mensuráveis de latência e throughput. Siga os passos deste guia, monitore seu servidor com ferramentas como htop, glances ou netdata para observar as frequências em tempo real, e ajuste conforme a natureza específica da sua aplicação web.