Um patch está pendente via x86/urgente para solucionar um problema com os processadores Intel Alder Lake e Raptor Lake que está deixando os desenvolvedores do kernel, por enquanto, desabilitar os identificadores de contexto de processo (PCID) com esses processadores móveis/desktop da Intel.

Um patch está definido para ser principal para o desenvolvimento do Linux 6.4 e também portado para as versões estáveis ​​do kernel, evitando liberações INVLPG globais incompletas. O patch de um engenheiro da Intel Linux explica:

“A instrução INVLPG é usada para invalidar entradas TLB para um endereço virtual especificado. o PCID atual *e* as entradas globais. (Observação: apenas os mapeamentos de kernel definem Global=1.)

Infelizmente, algumas implementações de INVLPG podem deixar as traduções globais não liberadas quando os PCIDs estão ativados.

Como solução alternativa, nunca habilite PCIDs em processadores afetados.

Espero eventualmente haverá mitigações de microcódigo para substituir esta solução alternativa de software. No entanto, os números exatos da versão em que isso acontecerá não são conhecidos hoje. Depois que os números da versão são definidos, a lista de processadores pode ser ajustada para desativar apenas os PCIDs nos processadores afetados com microcódigo afetado.

Observação: se alguém quiser uma solução rápida que não exija correção, basta colocar’nopcid’na linha de comando do kernel.”

Os processadores afetados terminam sendo processadores Intel Alder Lake e Raptor Lake. Conforme mencionado na mensagem do patch, a Intel está trabalhando em uma mitigação de microcódigo para esse problema, mas por enquanto, pelo menos, o kernel do Linux está configurado para desabilitar o suporte PCID para Alder Lake/Alder Lake L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S até que a mitigação do microcódigo possa ser tratada.

INVLPG é usado para invalidar entradas TLB especificadas. Pelo menos Alder Lake e Raptor Lake não precisa de Kernel Page Table Isolation (KPTI) para mitigar o Meltdown, pois esses processadores mais novos não são afetados por ele. Mas para processadores Intel mais antigos, o suporte a PCID ajudou a compensar parte da sobrecarga ao lidar com Kernel Page Table Isolation/atenuar o Meltdown, conforme mostrado várias anos atrás. A documentação do kernel PTI passa a observar mais extensivamente os benefícios do suporte a PCID:

“Process Context IDentifiers (PCID) é um recurso da CPU que nos permite ignorar a descarga de todo o TLB ao alternar tabelas de páginas, definindo um bit especial em CR3 quando as tabelas de páginas são alteradas. Isso torna a troca das tabelas de página (na troca de contexto ou na entrada/saída do kernel) mais barata. Mas, em sistemas com suporte a PCID, o código de troca de contexto deve liberar as entradas do usuário e do kernel do TLB. A liberação de TLB do PCID do usuário é adiada até a saída para o espaço do usuário, minimizando o custo. Consulte intel.com/sdm para obter os detalhes sangrentos de PCID/INVPCID.

Em sistemas sem suporte a PCID, cada gravação CR3 libera todo o TLB. Isso significa que cada syscall, interrupção ou exceção libera o TLB.”

De qualquer forma, executarei alguns benchmarks no Raptor Lake para ver se isso-pelo menos temporariamente-desabilitar o suporte a PCID significa para qualquer uma das áreas usuais de desempenho para usuários finais.

Categories: IT Info