Progression des performances de la table de routage IPv6 sous Linux
Vincent Bernat
Dans un précédent article, j’expliquais comment Linux stockait les routes IPv6. Le graphique suivant montre l’évolution des performances de Linux depuis le noyau 2.6.39 :
Tous les noyaux sont compilés avec GCC 4.9 (issu de Debian Jessie). Cette
version est compatible avec des noyaux antiques ainsi qu’avec les noyaux les
plus récents. La configuration du noyau est celle par défaut avec les options
CONFIG_SMP
, CONFIG_IPV6
, CONFIG_IPV6_MULTIPLE_TABLES
et
CONFIG_IPV6_SUBTREES
activées. D’autres options mineures sont activées pour
permettre de prendre les mesures.
Il y a trois changements notables :
- Avec Linux 3.1, Eric Dumazet retarde la copie des métriques pour corriger le partage involontaire entre toutes les entrées du cache (commit 21efcfa0ff27). Chaque route en cache dispose désormais de ces propres métriques, ce qui explique l’impact sur les performances pour les scénarios autres que celui en /128.
- Avec Linux 3.9, Yoshifuji Hideaki retire l’enchevêtrement entre les entrées de routage et le sous-système des voisins (commit 887c95cc1da5). Cela aurait dû apporter un gain en performance.
- Avec Linux 4.2, Martin KaFai Lau élimine la création des entrées dans le cache pour la plupart des routes à l’exception des routes dont le PMTU est différent du MTU de l’interface sous-jacente. Les gains proviennent essentiellement du commit 4b32b5ad31a6 et du commit 45e4fd26683c.
Mise à jour à mi-2018#
Voici un graphique concernant des noyaux plus récents. Les mesures ont été effectuées sur un Intel Xeon Gold 6148 tournant à 2,4 GHz, avec GCC 6.3 sur Debian Stretch:
Les régressions observées sur les noyaux 4.4.147 et 4.9.119 sont uniquement dues aux contre-mesures pour Spectre1. La petite amélioration des performance pour Linux 4.14 provient de mon commit feca7d8c135b qui optimise le cas sans règles de routage spécifiques. Dans Linux 4.15, l’amélioration la plus notable remonte au commit 66f5d6ce53e6 : Wei Wang remplace le verrou par du RCU et un verrou tournant. Dans Linux 4.18, David Ahern améliore les structures de données utilisées par la table de routage. Le progrès ne se manifeste que modestement sur les courbes mais, par la suite, cela devrait permettre des gains supplémentaires. Il devient aussi possible de comparer plus équitablement IPv4 et IPv6.