Ultimamente, uma das perguntas mais comuns é como a proteção contra o Meltdown / Spectre, e agora também contra o L1TF / Foreshadow, afeta o desempenho do Linux. O início
do desenvolvimento do
kernel do Linux 4.19 este mês aumentou o fogo não apenas no x86_64, mas também no POWER / s390 / ARM. Para ter uma idéia geral do efeito dos patches no desempenho, testei três sistemas Intel Xeon e dois sistemas AMD EPYC, além de uma máquina virtual de cada lado, para avaliar o desempenho padrão do kernel Linux 4.19 com e sem patches correspondentes.

Em todas as máquinas, um sistema foi instalado com o kernel Linux 4.19-rc1 lançado no fim de semana passado. Na Intel, os patches correspondentes incluem isolamento da tabela de páginas (PTI / KPTI) para Meltdown e vários patches Spectre contra a execução especulativa de comandos, incluindo a limpeza do ponteiro do usuário, usando retpoline via IBPB IBRS_FW, o patch da vulnerabilidade de desvio de armazenamento especulativo usando prctl e seccomp e também inversão PTE e descarga de cache condicional em máquinas virtuais - isto é para L1TF / Foreshadow.
Por padrão, o kernel do Linux não fornece proteção "completa" contra vulnerabilidades, desativando o suporte Intel HT / SMT, portanto, lembre-se disso se você usar máquinas virtuais e fornecer código não confiável ou acesso de usuários à VM. Se você selecionar a proteção total e desativar o SMT, o
impacto no desempenho será muito mais visível devido à redução pela metade do número de threads disponíveis. Os provedores de serviços em nuvem parecem simplesmente configurar agendadores para que os fluxos SMT não passem pelos usuários. Isso evita o enorme custo óbvio de desativar o Hyper Threading. Então agora estamos apenas comparando a proteção do kernel padrão / estoque.

O AMD EPYC, por padrão, fornece proteção apenas para as vulnerabilidades correspondentes que os preocupam: isso está limpando o ponteiro do usuário para o Spectre V1, o AMD Retpoline IBPB para o Spectre V2 e desativando o Bypass de armazenamento especulativo (SSBD) para o Spectre V4.

Após testar todas as configurações no kernel padrão do Linux 4.19-rc1, os testes foram repetidos usando
várias opções de proteção em tempo de execução . Todos os sistemas foram testados com o Ubuntu 18.04.1 LTS x86_64 com o kernel Linux 4.19-rc1 via Ubuntu Mainline Kernel PPA, o mais recente microcódigo / BIOS, GCC 7.3 e sistema de arquivos EXT4.

Configurações do sistema no teste:
- Skylake Intel Xeon E3-1280 v5 na placa-mãe MSI Z170A SLI PLUS, 16 GB DDR4 e SSD Toshiba RD400 NVMe de 256 GB.
- Intel Xeon E5-2687W v3 Haswell na placa-mãe MSI X299 SLI PLUS, 32 GB DDR4 e SSD Intel 530 SATA 3.0 de 80 GB.
- Dois racks Intel Xeon Gold 6138 Tyan 1U com 96 GB de RAM e SSD Samsung 970 EVO NVMe de 256 GB.
- Máquina virtual KVM no servidor Xeon Gold de processador duplo acima mencionado. Essa VM foi o único processo ativo na máquina e foi configurada para acessar 80% dos núcleos / threads da CPU (64 threads), 48 GB de RAM e um disco virtual de 118 GB. Durante o teste, a proteção contra vulnerabilidades foi desativada no host e na VM.
- AMD EPYC 7601 em um servidor Tyan 2U com 128 GB de RAM e SSD Intel Optane 900p NVMe de 280 GB.
- A máquina virtual KVM no servidor AMD EPYC 7601 acima mencionado. Possui acesso a 80% dos núcleos / threads da CPU (52 threads), 48 GB de RAM e um disco virtual de 120 GB.
- Servidor AMD EPYC 7551 em uma placa-mãe Gigabyte MZ31-AR0 com 32 GB de RAM e SSD NVMe Samsung 960 EVO 256 GB.
Obviamente, as configurações das máquinas são diferentes e não devem ser comparadas entre si, ou seja, para verificar a proteção on / off contra vulnerabilidades de processadores no kernel Linux 4.19. Portanto, para maior clareza, todos os dados são normalizados para o desempenho de cada sistema. Todos os testes do
Phoronix Test Suite .
Para o artigo, foram selecionados testes relacionados ao Spectre / Meltdown, ou seja, com intensas interações entre entrada e saída ou kernel. A carga é apenas da CPU e não depende muito do cache do processador.

O perfil do CompileBench é provavelmente a maneira mais fácil de mostrar o impacto do Spectre / Meltdown. No kernel Linux 4.19, quando a proteção é ativada, os processadores Intel mostram uma redução de 7 a 16% no desempenho, enquanto os processadores AMD mostram uma redução de 3 a 4%.

Uma situação semelhante nos subtestes com a leitura de uma árvore compilada. Os processadores Intel têm uma queda de desempenho de 14 a 15%, enquanto os processadores AMD têm uma queda de 4 a 5%.

Em tarefas reais, como compilar o kernel Linux, a diferença de desempenho será de cerca de 2%.

O benchmark do agendador do kernel Hackbench também sofre com a ativação da segurança. Nos processadores Intel, o desempenho é reduzido em cerca de 20%, exceto o Xeon Gold. Os sistemas AMD EPYC não fazem muita diferença.

O servidor de banco de dados PostgreSQL é um dos aplicativos reais que sofreram com a degradação do desempenho após a instalação da proteção nos processadores. Nesse teste em particular, a diferença para os processadores Intel foi de 5 a 8% e para o EPYC - 1%.



Outro programa real com degradação do desempenho devido ao Spectre / Meltdown é o editor gráfico do GIMP. A diferença para a Intel é de 5 a 10%, para a AMD - de 0 a 2%.

O Redis DBMS no sistema Intel Skylake E3 v5 diminui 11% e em outros processadores Intel - em 5-7%, a diferença entre os sistemas AMD EPYC é de 1 a 5%.

O servidor da web Nginx nos sistemas Xeon testados no kernel Linux 4.19 mostrou uma diferença de desempenho de até 20% e no AMD EPYC - de 1-2% a 6%.

Da mesma forma, o servidor Web Apache durante a instalação padrão é executado muito mais lentamente após a ativação da proteção nos processadores Intel e praticamente sem alterações nos processadores AMD.

No teste da velocidade de criação de arquivos OSBench, o sistema no Intel Xeon diminui de 13 a 16% e os sistemas EPYC em 6-9%.

O teste para criar threads também mostra uma diferença notável entre os processadores Intel e AMD.


Ao iniciar programas e criar processos, há uma diferença menor, mas perceptível, na operação padrão do kernel Linux 4.19 em comparação à proteção desabilitada.
É assim que as coisas acontecem com o desempenho dos processadores no kernel Linux 4.19 após a instalação dos patches. Lembre-se de que, se o seu sistema estiver aberto a usuários / códigos não confiáveis, especialmente em máquinas virtuais, poderão ser necessárias ações adicionais para proteção, como l1tf = full, até desativar o SMT / HT ou liberar obrigatoriamente o cache L1, o que mais diminuirá mais o desempenho do sistema. O efeito dessas proteções contra L1TF / Foreshadow é descrito em mais detalhes em um
artigo anterior .
Talvez no futuro executemos testes semelhantes no Linux 4.19 com processadores de desktop e cargas de trabalho correspondentes.