Récemment, l'une des questions les plus courantes est de savoir comment la protection contre Meltdown / Spectre, et maintenant également contre L1TF / Foreshadow, affecte les performances de Linux. Le début
du développement du
noyau Linux 4.19 ce mois-ci a alimenté le feu non seulement pour x86_64, mais aussi pour POWER / s390 / ARM. Pour avoir une idée générale de l'effet des correctifs sur les performances, j'ai testé trois systèmes Intel Xeon et deux systèmes AMD EPYC, ainsi qu'une machine virtuelle de chaque côté, pour évaluer les performances par défaut du noyau Linux 4.19 avec et sans correctifs correspondants.

Sur toutes les machines, un système a été installé avec le noyau Linux 4.19-rc1 sorti le week-end dernier. Sur Intel, les correctifs correspondants incluent l'isolement des tables de pages (PTI / KPTI) pour Meltdown et divers correctifs Spectre contre l'exécution spéculative de commandes, y compris l'effacement du pointeur __user, en utilisant retpoline via IBPB IBRS_FW, le correctif pour la vulnérabilité de contournement de magasin spéculatif en utilisant prctl et seccomp, et également l'inversion PTE et le vidage conditionnel du cache dans les machines virtuelles - c'est pour L1TF / Foreshadow.
Par défaut, le noyau Linux ne fournit pas de protection «complète» contre les vulnérabilités en désactivant la prise en charge Intel HT / SMT, alors gardez cela à l'esprit si vous utilisez des machines virtuelles et fournissez du code non fiable ou un accès des utilisateurs à la machine virtuelle. Si vous sélectionnez une protection complète et désactivez SMT, l'
impact sur les performances est beaucoup plus notable en raison de la réduction de moitié du nombre de threads disponibles. Les fournisseurs de services cloud semblent simplement configurer des planificateurs afin que les flux SMT ne passent pas par les utilisateurs. Cela évite le coût énorme évident de la désactivation de Hyper Threading. Alors maintenant, nous ne faisons que comparer la protection du noyau stock / par défaut.

AMD EPYC, par défaut, fournit une protection uniquement pour les vulnérabilités correspondantes qui les concernent: cela efface le pointeur __user pour Spectre V1, AMD Retpoline IBPB pour Spectre V2 et désactive le contournement de magasin spéculatif (SSBD) pour Spectre V4.

Après avoir testé toutes les configurations sur le noyau de stock Linux 4.19-rc1, les tests ont été répétés en utilisant
divers commutateurs de protection lors de l'exécution . Tous les systèmes ont été testés avec Ubuntu 18.04.1 LTS x86_64 avec le noyau Linux 4.19-rc1 via Ubuntu Mainline Kernel PPA, le dernier microcode / BIOS, le système de fichiers GCC 7.3 et EXT4.

Configurations du système dans le test:
- Intel Xeon E3-1280 v5 Skylake sur carte mère MSI Z170A SLI PLUS, 16 Go DDR4 et 256 Go Toshiba RD400 NVMe SSD.
- Intel Xeon E5-2687W v3 Haswell sur carte mère MSI X299 SLI PLUS, 32 Go DDR4 et 80 Go Intel 530 SATA 3.0 SSD.
- Deux racks Intel Xeon Gold 6138 Tyan 1U avec 96 Go de RAM et SSD Samsung 970 EVO NVMe 256 Go.
- Machine virtuelle KVM sur le serveur Xeon Gold à double processeur susmentionné. Cette machine virtuelle était le seul processus actif sur la machine et a été configurée pour accéder à 80% des cœurs / threads du CPU (64 threads), 48 Go de RAM et un disque virtuel de 118 Go. Pendant les tests, la protection contre les vulnérabilités a été désactivée sur l'hôte et la machine virtuelle.
- AMD EPYC 7601 sur un serveur Tyan 2U avec 128 Go de RAM et 280 Go SSD Intel Optane 900p NVMe.
- La machine virtuelle KVM sur le serveur AMD EPYC 7601 susmentionné. Elle a accès à 80% des cœurs / threads du processeur (52 threads), 48 Go de RAM et un disque virtuel de 120 Go.
- Serveur AMD EPYC 7551 sur une carte mère Gigabyte MZ31-AR0 avec 32 Go de RAM et SSD NVMe Samsung 960 EVO 256 Go.
Évidemment, les configurations des machines sont différentes et elles ne sont pas destinées à être comparées entre elles, à savoir pour vérifier la protection on / off contre les vulnérabilités des processeurs du noyau Linux 4.19. Par conséquent, pour plus de clarté, toutes les données sont normalisées en fonction des performances de chaque système. Tous les tests de la
Suite de tests Phoronix .
Pour l'article, des tests liés à Spectre / Meltdown, c'est-à-dire avec des interactions d'entrée-sortie ou de noyau intensives, ont été sélectionnés. La charge est uniquement sur le CPU et ne dépend pas fortement du cache du processeur.

Le profil CompileBench est probablement le moyen le plus simple de montrer l'impact de Spectre / Meltdown. Sur le noyau Linux 4.19, lorsque la protection est activée, les processeurs Intel affichent une diminution de 7 à 16% des performances, tandis que les processeurs AMD affichent une diminution de 3 à 4%.

Une situation similaire dans les sous-tests avec la lecture d'un arbre compilé. Les processeurs Intel ont une baisse de performances de 14 à 15%, les processeurs AMD une baisse de 4 à 5%.

Dans les tâches réelles comme la compilation du noyau Linux, la différence de performances sera d'environ 2%.

Le benchmark du planificateur du noyau Hackbench souffre également de l'activation de la sécurité. Dans les processeurs Intel, les performances sont réduites d'environ 20%, à l'exception de Xeon Gold. Les systèmes AMD EPYC ne font pas beaucoup de différence.

Le serveur de base de données PostgreSQL est l'une des vraies applications qui ont souffert d'une dégradation des performances après l'installation de la protection sur les processeurs. Dans ce test particulier, la différence pour les processeurs Intel était de 5 à 8% et pour les EPYC de 1%.



Un autre vrai programme avec une dégradation des performances due à Spectre / Meltdown est l'éditeur graphique GIMP. La différence pour Intel est de 5 à 10%, pour AMD - de 0 à 2%.

Le SGBD Redis sur le système Intel Skylake E3 v5 ralentit de 11%, et sur les autres processeurs Intel - de 5-7%, la différence entre les systèmes AMD EPYC est de 1-5%.

Le serveur Web Nginx sur les systèmes Xeon testés sur le noyau Linux 4.19 a montré une différence de performances allant jusqu'à 20% et sur AMD EPYC - de 1-2% à 6%.

De même, le serveur Web Apache lors de l'installation par défaut s'exécute beaucoup plus lentement après avoir activé la protection sur les processeurs Intel et pratiquement sans modifications sur les processeurs AMD.

Dans le test de la vitesse de création de fichiers OSBench, le système sur Intel Xeon ralentit de 13-16% et les systèmes EPYC de 6-9%.

Le test de création de threads montre également une différence notable entre les processeurs Intel et AMD.


Lors du démarrage de programmes et de la création de processus, il existe une différence plus petite mais notable dans le fonctionnement par défaut du noyau Linux 4.19 par rapport à la protection désactivée.
Voici comment les choses se passent avec les performances des processeurs sur le noyau Linux 4.19 après l'installation des correctifs. Gardez à l'esprit que si votre système est ouvert à des utilisateurs / codes peu fiables, en particulier dans les machines virtuelles, des actions supplémentaires peuvent être nécessaires pour la protection, telles que l1tf = full, jusqu'à la désactivation de SMT / HT ou le vidage obligatoire du cache L1, quoi d'autre diminuera davantage les performances du système. L'effet de ces protections contre L1TF / Foreshadow est décrit plus en détail dans un
article précédent .
Peut-être qu'à l'avenir, nous exécuterons des tests similaires sur Linux 4.19 avec des processeurs de bureau et les charges de travail correspondantes.