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étrica | Antes | Depois | Diferença |
---|---|---|---|
.text | 28.816.070 | 28.904.324 | +0,3% |
.data | 7.720.174 | 7.735.982 | +0,2% |
.bss | 1.837.328 | 1.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.