Disponible depuis le 12 avril, Linux 7.0 apporte son lot de changements et de correctifs. Les développeurs apprécieront le support officiel de Rust qui sort de sa phase expérimentale ou les mises à jour pour les CPU AMD et Intel ainsi que les architectures RISC-V et LoongArch. La dernière itération comprend également plusieurs évolutions sur la partie réseau.

La congestion de TCP corrigée grâce à AccECN

Afin d’améliorer la gestion de la congestion TCP, la prise en charge d'AccECN (accurate explicit congestion notification) est désormais intégrée par défaut dans Linux. Lorsque les réseaux sont saturés, les routeurs réagissent généralement en rejetant des paquets, ce qui oblige les expéditeurs à détecter cette perte et à ralentir leur débit. En 2001, le protocole ECN a amélioré ce système en donnant aux routeurs la capacité de signaler la congestion sans rejeter de paquets, ce qui réduit les retransmissions et optimise les performances pour les applications comme le streaming vidéo.

Le problème est que l'ECN existant est trop rudimentaire en soulignant il y a eu de la congestion ou il n'y en a pas eu. Ce contrôle basique de la congestion répondait à un certain besoin, mais avec le développement du haut-débit les administrateurs ont besoin de connaître l’ampleur de la congestion. AccECN apporte cette information et permet aux administrateurs d’adapter leur réponse.

Le trafic UDP optimisé

Le trafic TCP n’est pas le seul à bénéficier d’un gain de performance. Le noyau Linux 7.0 inclut une optimisation de la synchronisation horaire pour le trafic UDP (user datagram protocol).  Comme l’indique des experts de Google, « les protocoles de transport réseau exigent que les pilotes de carte réseau obtiennent l'horodatage matériel (hwtstamp) de tous les paquets entrants, et éventuellement de tous les paquets sortants ». Pour répondre à cette problématique, ils s’appuient sur l’outil de contrôle de congestion réseau Swift pour TCP, mais ils intègrent dorénavant dans le code la fonction « timecounter_cyc2time() » pour déterminer les chemins d’accès les plus rapides.

Avec cette évolution, les ingénieurs de Google ont constaté une augmentation de 12,3 % du débit sur la réception UDP lors de tests sur des NIC de 100 Gbit/s. Ils observent que la fonction « timecounter_cyc2time() » a pu être déclenchée plus de 100 millions de fois par seconde sur des serveurs très sollicités. En éliminant la surcharge liée aux appels pour chaque paquet, l’optimisation réduit considérablement le nombre de cycles CPU par paquet, permettant ainsi un traitement plus rapide pour les applications gourmandes en données.

Evolution du planificateur réseau Cake

Toujours dans les apports de cette dernière itération, le noyau Linux étoffe son planificateur réseau intégré, Cake qui gère la mise en file d’attente et l’envoi de paquets. Si l’outil est efficace depuis plusieurs années, il a toujours été lié à un seul cœur de processeur. Or les évolutions des interfaces réseaux montrent que cela ne suffit plus pour appliquer des règles au haut débit.

Linux 7.0 répond à ce problème avec cake_mq, une variante multi-files d'attente développée par les ingénieurs de Red Hat. Plutôt que d'exécuter une seule instance de Cake, l’outil de Rd Hat installe une instance du planificateur sur chaque file d'attente matérielle de l'interface, répartissant ainsi la charge de traitement sur plusieurs cœurs de processeur.

Amélioration pour IPv6

Cela fait longtemps que Linux prend en charge IPv6, mais c’est un domaine qui continue de progresser à mesure que les opérateurs identifient des problèmes. L'un des changements les plus marquants de la version 7.0 est l'optimisation du chemin de sortie TCP IPv6 pour mettre en cache les informations de flux. Cette mise à jour cible les environnements hautes performances en réduisant la charge liée au recalcul des données de flux pour chaque paquet sortant. Le noyau résout également une incohérence de routage de longue date entre IPv4 et IPv6 liée à ce que l'on appelle les « incompatibilités matérielles de saut suivant ». Pour rappel, les annonces d’un routeur s’appuient sur un protocole de routage comprenant un préfixe IP et l’adresse IP de l’équipement suivant. Si les deux routeurs sont basés sur IPv4 pas de soucis, mais pour passer d’IPv4 à IPv6, il faut attribuer une adresse IP par interface sur chaque routeur. Et cela peut provoquer des erreurs ou des déconnexions.

Pour éviter cela, Linux gère désormais de manière plus intelligente cette bascule sous IPv6 où le saut suivant dans le routage est atteint via un chemin virtuel ou physique différents de celui prévu.  Cela empêche le noyau de générer une erreur et de rompre une connexion simplement parce que le routeur de saut suivant ne correspond pas parfaitement aux règles de la table de routage interne. L’approche sert par ailleurs à prévenir la perte de paquets dans les environnements complexes de réseaux SDN (software defined networking) et les réseaux mesh de conteneurs.