Linus Torvalds acabou de integrar uma correção urgente para o turbostat, a ferramenta oficial do kernel Linux para monitoramento de frequência, temperatura e consumo de energia do processador. O patch, enviado por Len Brown, resolve uma regressão recente que quebrou a leitura dos sensores de energia (RAPL) especificamente em processadores AMD.
O problema foi causado por uma “limpeza de código” anterior que, inadvertidamente, alterou a lógica de como o software identifica os núcleos do processador, resultando em dados incorretos ou ausentes para usuários da plataforma AMD.
Para o iniciante: o carteiro entregou no endereço errado?
Para entender esse bug, imagine que o processador é um prédio de apartamentos (o “Pacote”).
- O Kernel (S.O.): Tem uma lista sequencial de moradores na sua prancheta: morador 1, morador 2, morador 3… (Isso é o cpu index).
- O Hardware (AMD): Tem os números reais nas portas dos apartamentos: apto 101, apto 102, apto 205… (Isso é o core_id).
O turbostat precisa ler o relógio de luz (RAPL) de cada apartamento. O bug fazia o turbostat olhar para a prancheta do Kernel (índice 3) e tentar achar uma porta com o número “3”. Mas no prédio da AMD, não existe porta 3, existe a porta 102.
Como resultado, o inspetor (turbostat) tentava ler um relógio que não existia ou lia o relógio errado. A correção ensina o inspetor a olhar novamente para o número real na porta (core_id) em vez da ordem na prancheta.
Detalhes técnicos da correção
A falha residia na função get_rapl_domain_id dentro do código fonte do turbostat (tools/power/x86/turbostat/turbostat.c).
Em arquiteturas que suportam RAPL (Running Average Power Limit) por núcleo, é necessário gerar um ID único global para cada núcleo para rastrear seu consumo. O código incorreto fazia o seguinte:
C// Antes (Bug) return GLOBAL_CORE_ID(cpu, cpus[cpu].package_id);Aqui, cpu é apenas o índice lógico do Linux. A correção substitui isso pelo ID físico do núcleo, que é o que o hardware espera para mapear a topologia corretamente:
C// Depois (Correção) return GLOBAL_CORE_ID(cpus[cpu].core_id, cpus[cpu].package_id);Além disso, o patch removeu um cálculo redundante de topo.num_cores, que estava sendo calculado de forma simplista (max_core_id + 1) e poderia gerar valores errados em topologias complexas com “buracos” na numeração dos núcleos.
Curiosidades e bastidores da discussão
A análise deste commit revela um cenário clássico de desenvolvimento de software:
- A “maldição” da limpeza: O commit de Len Brown menciona explicitamente que o erro foi causado por uma “errant code cleanup” (limpeza de código errada). Muitas vezes, desenvolvedores tentam simplificar o código para torná-lo mais bonito, mas acabam removendo nuances vitais que faziam o sistema funcionar em hardwares específicos.
- Ferramentas no Kernel: É interessante notar que, embora estejamos falando do repositório do kernel Linux, o turbostat é uma ferramenta de espaço de usuário (userspace) que vive dentro da árvore do kernel (pasta tools/). Isso garante que a ferramenta de diagnóstico esteja sempre sincronizada com as definições mais recentes da arquitetura x86.
Status de lançamento
O patch 7ad54bb foi mesclado por Linus Torvalds em 18 de fevereiro de 2026.
- Status atual: Integrado ao branch master.
- Impacto: Usuários de processadores AMD (Ryzen/EPYC) que utilizam o turbostat para monitorar eficiência energética devem atualizar a ferramenta assim que a nova versão estiver disponível nas distribuições, ou compilar manualmente a partir da árvore do kernel.