Intel fazendo melhorias para atualização de microcódigo de CPU no Linux
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.
A ramificação x86/microcode do Viatip.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.
A incorporação de aprimoramentos relacionados ao carregamento de microcódigo x86 é antecipada como um componente da próxima versão do Linux 6.6, tendo sido incluída no pool de iniciativas de tecnologia (TIP).
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:
Os usuários corporativos valorizam muito as atualizações de microcódigo oportunas. No entanto, o carregamento tardio apresenta um desafio, pois exige uma compreensão abrangente das implicações da atualização nos componentes atualmente utilizados pelo sistema operacional. Felizmente, corporações de grande porte possuem equipes de engenharia dedicadas e ampla assistência técnica de fornecedores, capacitando-as a gerenciar essas situações com eficiência. Por outro lado, os administradores comuns carecem de recursos tão extensos, levando assim a equipe do kernel a marcar preventivamente o kernel ao encontrar carregamentos atrasados.
A Intel introduziu uma nova adição ao cabeçalho do microcódigo, conhecido como campo “revisão mínima do microcódigo”, que especifica a versão mínima do microcódigo necessária para executar uma determinada carga com segurança. Nas versões anteriores do microcódigo, esse campo estava ausente, levando o sistema operacional a considerar essas instâncias como potencialmente perigosas. Ao implementar verificações mínimas de revisão por meios como Kconfig ou opções de linha de comando, o kernel agora pode se recusar a carregar quaisquer iterações comprometidas. Por outro lado, quando uma iteração segura é executada, ela não resulta na marcação do kernel com uma contaminação. No entanto, se uma revisão instável for executada, o kernel permanecerá corrompido.
No entanto, abordar apenas o atraso no carregamento não resolve necessariamente todos os outros problemas associados a ele.
A utilização de hyperthreading nas atuais Unidades Centrais de Processamento (CPUs) da Intel apresenta um risco de segurança inerente quando comparada às Interrupções Não Mascaráveis (NMIs). Especificamente, se ocorrer um NMI durante a execução de threads secundários simultâneos ao carregamento do microcódigo pelo thread primário, isso poderá resultar em instabilidade ou falha do sistema.
O impacto potencial de irmãos SMT off-line suaves que empregam MWAIT enquanto parecem inativos não deve ser subestimado, principalmente devido à possibilidade de que atualizações de microcódigo possam afetar esse comportamento. Esta situação é ainda mais preocupante dentro do contexto mais amplo das medidas de segurança’nosmt'.
O código fundamental e o código específico da Intel não abordam as questões acima mencionadas de forma alguma.
Ao tentar executar este conceito, encontrei um código desatualizado e complicado que carecia de coerência e eficiência. Para criar uma base para a introdução de novos recursos, foi necessário refatorar e simplificar a base de código existente, eliminando redundâncias e otimizando sua estrutura.
A capacidade de atualizar o microcódigo da CPU em um sistema operacional Linux enquanto ele já está em execução foi introduzida como uma alternativa para realizar a atualização durante os estágios iniciais do processo de inicialização, que ocorre quando os núcleos da CPU não estão ocupados com tarefas. Esse recurso apresenta vantagens significativas para hiperescaladores, provedores de serviços em nuvem e outras organizações importantes que priorizam a implantação imediata de aprimoramentos de segurança sem causar nenhuma interrupção em seus sistemas. Embora permaneça incerto se a funcionalidade aprimorada de carregamento tardio do microcódigo da CPU da Intel será incluída na próxima versão do kernel 6.6, no entanto, esforços para seu desenvolvimento estão em andamento.
*️⃣ Link da fonte: