Una de las preguntas más comunes últimamente es cómo la protección contra Meltdown / Spectre, y ahora también contra L1TF / Foreshadow, afecta el rendimiento de Linux. El inicio
del desarrollo del
kernel de Linux 4.19 este mes agregó combustible al fuego no solo para x86_64, sino también para POWER / s390 / ARM. Para tener una idea general del efecto de los parches en el rendimiento, probé tres sistemas Intel Xeon y dos sistemas AMD EPYC, así como una máquina virtual en cada lado, para evaluar el rendimiento predeterminado del núcleo Linux 4.19 con y sin los parches correspondientes.

En todas las máquinas, se instaló un sistema con el kernel de Linux 4.19-rc1 lanzado el pasado fin de semana. En Intel, los parches correspondientes incluyen el aislamiento de la tabla de páginas (PTI / KPTI) para Meltdown y varios parches Spectre contra la ejecución especulativa de comandos, incluida la eliminación del puntero __user, el uso de retpoline a través de IBPB IBRS_FW, el parche para la vulnerabilidad Speculative Store Bypass usando prctl y seccomp, y también inversión de PTE y lavado de caché condicional en máquinas virtuales: esto es para L1TF / Foreshadow.
De manera predeterminada, el kernel de Linux no proporciona protección "completa" contra vulnerabilidades al deshabilitar la compatibilidad con Intel HT / SMT, así que tenga esto en cuenta si usa máquinas virtuales y proporciona código no confiable o acceso de los usuarios a la VM. Si selecciona protección completa y deshabilita SMT, el
impacto en el rendimiento es mucho más notable debido a la reducción a la mitad del número de subprocesos disponibles. Los proveedores de servicios en la nube parecen simplemente configurar planificadores para que los flujos SMT no pasen a través de los usuarios. Esto evita el enorme costo obvio de deshabilitar Hyper Threading. Así que ahora solo estamos comparando la protección del núcleo stock / predeterminado.

AMD EPYC, de manera predeterminada, proporciona protección solo para las vulnerabilidades correspondientes que les conciernen: esto es borrar el puntero de usuario __ para Spectre V1, AMD Retpoline IBPB para Spectre V2 y deshabilitar el Bypass de almacenamiento especulativo (SSBD) para Spectre V4.

Después de probar todas las configuraciones en el núcleo de Linux 4.19-rc1, las pruebas se repitieron utilizando
varios conmutadores de protección en tiempo de ejecución . Todos los sistemas fueron probados con Ubuntu 18.04.1 LTS x86_64 con Linux kernel 4.19-rc1 a través de Ubuntu Mainline Kernel PPA, el último microcódigo / BIOS, GCC 7.3 y el sistema de archivos EXT4.

Configuraciones del sistema en la prueba:
- Intel Xeon E3-1280 v5 Skylake en la placa base MSI Z170A SLI PLUS, 16 GB DDR4 y 256 GB Toshiba RD400 NVMe SSD.
- Intel Xeon E5-2687W v3 Haswell en placa base MSI X299 SLI PLUS, 32 GB DDR4 y 80 GB Intel 530 SATA 3.0 SSD.
- Dos bastidores Intel Xeon Gold 6138 Tyan 1U con 96 GB de RAM y Samsung 970 EVO NVMe SSD de 256 GB.
- Máquina virtual KVM en el mencionado servidor Xeon Gold de doble procesador. Esta VM fue el único proceso activo en la máquina y se configuró para acceder al 80% de los núcleos / hilos de la CPU (64 hilos), 48 GB de RAM y un disco virtual de 118 GB. Durante las pruebas, se deshabilitó la protección contra vulnerabilidades tanto en el host como en la VM.
- AMD EPYC 7601 en un servidor Tyan 2U con 128 GB de RAM y 280 GB Intel Optane 900p NVMe SSD.
- La máquina virtual KVM en el servidor AMD EPYC 7601 mencionado anteriormente. Tiene acceso al 80% de los núcleos / hilos de la CPU (52 hilos), 48 GB de RAM y un disco virtual de 120 GB.
- Servidor AMD EPYC 7551 en una placa base Gigabyte MZ31-AR0 con 32 GB de RAM y Samsung 960 EVO 256GB NVMe SSD.
Obviamente, las configuraciones de las máquinas son diferentes y no están destinadas a ser comparadas entre sí, es decir, para verificar la protección de encendido / apagado contra las vulnerabilidades de los procesadores en el kernel Linux 4.19. Por lo tanto, para mayor claridad, todos los datos se normalizan al rendimiento de cada sistema. Todas las pruebas de
Phoronix Test Suite .
Para el artículo, se seleccionaron pruebas relacionadas con Spectre / Meltdown, es decir, con intensas interacciones de entrada-salida o kernel. La carga es solo en la CPU y no depende en gran medida de la memoria caché del procesador.

El perfil CompileBench es probablemente la forma más fácil de mostrar el impacto de Spectre / Meltdown. En el núcleo Linux 4.19, cuando la protección está activada, los procesadores Intel muestran una disminución del rendimiento del 7 al 16%, mientras que los procesadores AMD muestran una disminución del 3 al 4%.

Una situación similar en las subpruebas con la lectura de un árbol compilado. Los procesadores Intel tienen una caída de rendimiento del 14 al 15%, los procesadores AMD tienen una disminución del 4 al 5%.

En tareas reales como compilar el kernel de Linux, la diferencia de rendimiento será de alrededor del 2%.

El punto de referencia del planificador de kernel de Hackbench también sufre de activación de seguridad. En los procesadores Intel, el rendimiento se reduce en aproximadamente un 20%, a excepción de Xeon Gold. Los sistemas AMD EPYC no hacen mucha diferencia.

El servidor de base de datos PostgreSQL es una de las aplicaciones reales que sufrió una degradación del rendimiento después de instalar la protección en los procesadores. En esta prueba en particular, la diferencia para los procesadores Intel fue de 5-8%, y para EPYC - 1%.



Otro programa real con degradación del rendimiento debido a Specter / Meltdown es el editor gráfico GIMP. La diferencia para Intel es 5-10%, para AMD - 0−2%.

Redis DBMS en el sistema Intel Skylake E3 v5 se ralentiza en un 11%, y en otros procesadores Intel, en un 5-7%, la diferencia entre los sistemas AMD EPYC es de 1-5%.

El servidor web Nginx en sistemas Xeon probados en el kernel Linux 4.19 mostró una diferencia en el rendimiento de hasta un 20%, y en AMD EPYC: de 1-2% a 6%.

Del mismo modo, el servidor web Apache durante la instalación predeterminada funciona mucho más lento después de activar la protección en los procesadores Intel y prácticamente sin cambios en los procesadores AMD.

En la prueba de la velocidad de creación de archivos OSBench, el sistema en Intel Xeon se ralentiza en un 13-16% y los sistemas EPYC en un 6-9%.

La prueba para crear subprocesos también muestra una diferencia notable entre los procesadores Intel y AMD.


Al iniciar programas y crear procesos, hay una diferencia menor pero notable en la operación predeterminada del núcleo Linux 4.19 en comparación con la protección deshabilitada.
Así son las cosas con el rendimiento de los procesadores en el kernel de Linux 4.19 después de instalar parches. Tenga en cuenta que si su (s) sistema (s) está (n) abierto (s) a usuarios / códigos poco confiables, especialmente en máquinas virtuales, entonces se pueden requerir acciones adicionales para la protección, como l1tf = full, hasta deshabilitar SMT / HT o el vaciado obligatorio del caché L1, ¿qué más? disminuirá más el rendimiento del sistema. El efecto de estas protecciones contra L1TF / Foreshadow se describe con más detalle en un
artículo anterior .
Quizás en el futuro ejecutaremos pruebas similares en Linux 4.19 con procesadores de escritorio y las cargas de trabajo correspondientes.