Les dĂ©veloppeurs du sous-systĂšme de filtrage et de modification des paquets rĂ©seau Netfilter ont mis en place un ensemble de correctifs qui accĂ©lĂšrent considĂ©rablement le traitement de grands ensembles de correspondance (nftables set), nĂ©cessitant une vĂ©rification de la combinaison de sous-rĂ©seaux, de ports rĂ©seau, de protocoles et d'adresses MAC. Les correctifs ont dĂ©jĂ Ă©tĂ© acceptĂ©s dans la branche , qui sera proposĂ©e pour inclure dans le noyau Linux 5.7. L'accĂ©lĂ©ration la plus significative a Ă©tĂ© obtenue grĂące Ă des instructions AVX2 (des optimisations similaires basĂ©es sur les instructions NEON pour ARM devraient ĂȘtre publiĂ©es ultĂ©rieurement).
Les optimisations ont été intégrées dans le module (PIle PAcket POlicies), qui résout le problÚme de la correspondance du contenu du paquet avec des plages d'état des champs utilisées dans les rÚgles de filtrage, telles que les plages IP et les ports réseau (nft_set_rbtree et nft_set_hash manipulent la correspondance des intervalles et le reflet direct des valeurs). La version pipapo vectorisée avec des instructions AVX2 à 256 bits sur un systÚme avec un processeur AMD Epyc 7402 a montré un gain de performance de 420 % lors de l'analyse de 30 000 enregistrements, comprenant des paires port-protocole. Le gain pour la correspondance d'une paire sous-réseau et numéro de port pendant l'analyse de 1 000 enregistrements était de 87 % pour IPv4 et de 128 % pour IPv6.

Une autre optimisation, permettant d'utiliser des groupes de correspondance de 8 bits au lieu de 4 bits, a également montré un gain de performance significatif : 66 % lors de l'analyse de 30 000 enregistrements port-protocole, 43 % pour sous-réseau_IPv4-port et 61 % pour sous-réseau_IPv6-port. Au total, en tenant compte des optimisations AVX2, la performance de pipapo a augmenté dans les tests indiqués de 766 %, 168 % et 269 % respectivement. Les caractéristiques obtenues pour des correspondances complexes surpassent les vérifications des champs uniques dans (à l'exception du test de la paire port+protocole), mais sont encore inférieures aux vérifications directes utilisant et des gestionnaires de drop basés sur netdev.

Source : opennet.ru
