Linux se despede de otimizações específicas para sistemas com apenas um núcleo de CPU

4 min

Kernel Linux adota agendador único para todos os sistemas!

O renomado desenvolvedor Ingo Molnar propôs uma ampla reformulação no agendador do kernel Linux. A mudança histórica elimina boa parte das diferenciações entre kernels configurados para um único núcleo de CPU (UP – Uniprocessor) e aqueles com suporte a múltiplos núcleos (SMP – Symmetric Multi-Processing), padronizando o uso do agendador SMP mesmo para sistemas UP. O resultado: uma base de código significativamente mais simples, robusta e moderna.

Fim de uma era: o agendador SMP será o padrão para todos

Durante décadas, o kernel Linux manteve caminhos de código separados para sistemas UP e SMP, utilizando inúmeros blocos condicionais #ifdef CONFIG_SMP. Segundo o próprio Molnar, eram mais de 175 blocos só no agendador, gerando complexidade, erros de compilação e dificuldade de manutenção.

Com a nova proposta, todos os sistemas, mesmo os com um único núcleo, passarão a utilizar o código do agendador SMP. Essa unificação reduz significativamente o número de blocos condicionais para apenas 28.

“Esses blocos de código tornam o agendador mais difícil de revisar e entender”, explica Molnar. “Quase todas as plataformas modernas já utilizam SMP — mesmo em dispositivos embarcados.”

Para Iniciantes: O que é o agendador (scheduler) do Linux?

Pense no agendador como o “gerente de tarefas” do seu processador. Ele decide qual programa (ou “processo”) vai usar a CPU a cada milissegundo. Antigamente, havia dois tipos: um específico para sistemas com um núcleo (UP) e outro para sistemas com múltiplos núcleos (SMP). Agora, o Linux adotará apenas o modelo SMP, mesmo para máquinas com um único núcleo. Isso torna o kernel mais simples e moderno, sem impactar negativamente os usuários comuns.

Redução massiva de código e simplificação do desenvolvimento

A mudança resulta em uma grande limpeza no código-fonte do kernel:

  • Antes: 175 blocos #ifdef CONFIG_SMP
  • Depois: apenas 28
MétricaAntesDepoisDiferença
.text28.816.07028.904.324+0,3%
.data7.720.1747.735.982+0,2%
.bss1.837.3281.817.876-0,1%

A métrica de impacto é impressionante:

  • 33 arquivos modificados
  • 237 inserções
  • 999 deleções

Após ajustes adicionais, os números foram ainda mais impactantes:

  • 24 arquivos modificados
  • 26 inserções
  • 789 deleções

Ou seja, o código do agendador se tornou consideravelmente mais enxuto e mais fácil de manter — algo essencial para a saúde do projeto a longo prazo.

Impactos nos sistemas UP: mínimo, mas presente

Embora a padronização torne o kernel mais robusto, ela traz um leve impacto de desempenho e tamanho para sistemas com apenas um núcleo:

  • Benchmark perf bench sched pipe:
    • Antes: 2.55022 ± 0.00308 segundos
    • Depois: 2.68700 ± 0.01600 segundos
  • Tamanho do kernel (vmlinux):
    • Antes: 38.373.572 bytes
    • Depois: 38.458.182 bytes
    • Aumento: +0.3% no segmento de texto e +0.2% nos dados

Molnar justifica: “Prefiro inflar um pouco o kernel para sistemas UP do que quebrar algo. E quem quiser otimizações adicionais pode propor melhorias pontuais com base na nova estrutura.”

Mais robustez e menos dívida técnica

A reformulação do agendador é um marco importante na evolução do kernel Linux. Além de simplificar a base de código, a mudança reduz riscos de regressões, facilita revisões futuras e elimina complexidades desnecessárias que só persistiam por legado.

O repositório com os patches pode ser conferido neste link.

Compartilhe este artigo