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.
A 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.