Intel faz melhorias para atualização de microcódigo de CPU no Linux

Intel Lunar Lake Thunderbolt
Intel Media Driver 2023Q2 prepara mais novidades para Meteor Lake

Os engenheiros da Intel estão trabalhando para aprimorar a experiência de atualização do microcódigo da CPU x86_64 no Linux e, em particular, o trabalho é melhorar o suporte ao carregamento tardio do microcódigo no Linux para sistemas Intel com foco principal nos servidores Intel/usuários corporativos. Portanto, a Intel faz melhorias para atualização de microcódigo de CPU no Linux.

ramificação x86/microcode do tip.git é um lote inicial de melhorias de manipulação de microcódigo x86 para o kernel do Linux. Os patches removem alguns mutexes inúteis, eliminando alguns códigos de depuração antigos e também tornam agora que o suporte ao carregamento de microcódigo da CPU não é mais uma opção em sistemas baseados em x86, mas está sempre ativado. Com qualquer “configuração razoável” que precise de suporte para carregamento de microcódigo em sistemas Intel e AMD, a opção agora está sempre habilitada.Essas melhorias iniciais de carregamento de microcódigo x86, pelo menos, estão na fila do TIP e devem fazer parte do próximo ciclo do Linux 6.6.

Intel faz melhorias para atualização de microcódigo de CPU no Linux

Além disso, Thomas Gleixner tem liderado o trabalho para melhorar o carregamento tardio de microcódigo em sistemas Intel Linux. Ele explicou nesta série de patches:

“O carregamento tardio do microcódigo é desejado pelos usuários corporativos. O carregamento tardio é problemático, pois requer conhecimento detalhado sobre a alteração e uma análise se essa alteração modifica algo que já está em uso pelo kernel. Grandes clientes corporativos têm equipes de engenharia e acesso a informações técnicas aprofundadas suporte do fornecedor.O administrador regular não tem tais recursos, então o kernel sempre contaminou o kernel após o carregamento tardio.A Intel adicionou recentemente um novo campo anteriormente reservado ao cabeçalho do microcódigo que contém a revisão mínima do microcódigo que deve estar em execução na CPU para tornar a carga segura. Este campo é 0 em todas as revisões de microcódigo mais antigas, que o kernel assume como inseguras. 

A verificação mínima da revisão pode ser aplicada via Kconfig ou linha de comando do kernel. Em seguida, ele se recusa a carregar uma revisão insegura. O padrão carrega revisões inseguras como antes e contamina o kernel. Se uma revisão segura for carregada, o kernel não será contaminado.Mas isso não resolve todos os outros problemas conhecidos com carregamento tardio:- O carregamento tardio nas CPUs Intel atuais não é seguro em comparação com o NMI quando o hyperthreading está ativado. 

Se um NMI atingir o irmão secundário enquanto o primário carrega o microcódigo, a máquina pode travar.- Irmãos SMT off-line suaves que estão se fingindo de mortos com MWAIT também podem causar danos quando a atualização do microcódigo modifica MWAIT. Esse é um cenário realista no contexto de mitigações ‘nosmt’. :(Nem o código principal nem o código específico da Intel lidam com nada disso.Ao tentar implementar isso, tropecei em um código disfuncional, terrivelmente complexo e redundante, que decidi limpar primeiro para que a nova funcionalidade possa ser adicionada uma lousa limpa.”

O carregamento tardio do microcódigo no Linux permite que o microcódigo da CPU seja atualizado quando o sistema já está inicializado e executando o software, em comparação com o carregamento antecipado do microcódigo durante o tempo de inicialização, quando os núcleos da CPU não estão ocupados. O microcódigo de CPU de carregamento tardio é útil principalmente para hiperescaladores e provedores de serviços em nuvem e outras grandes organizações que desejam implantar rapidamente novas atualizações de microcódigo de CPU em nome da segurança, mas evitar o tempo de inatividade do sistema. Ainda não está claro se esse carregamento tardio do microcódigo da CPU da Intel será encerrado a tempo para o kernel v6.6, mas pelo menos essa melhoria está em andamento.