Deweloperzy podsystemu filtracji i modyfikacji pakietów sieciowych Netfilter zestaw poprawek, które znacznie przyspieszają przetwarzanie dużych list dopasowań (nftables set), w których wymagana jest weryfikacja połączenia podsieci, portów sieciowych, protokołu i adresów MAC. Poprawki zostały już przyjęte do gałęzi , która zostanie zaproponowana do włączenia w jądro Linux 5.7. Największe przyspieszenie osiągnięto dzięki instrukcji AVX2 (w przyszłości planowane jest opublikowanie podobnych optymalizacji opartych na instrukcjach NEON dla ARM).
Optymalizacje wprowadzono w module (PIle PAcket POlicies), rozwiązującym problem dopasowania zawartości pakietu do stosowanych w regułach filtracji dowolnych zakresów stanów pól, takich jak zakresy IP i portów sieciowych (nft_set_rbtree i nft_set_hash manipulują dopasowaniem interwałów oraz bezpośrednim odwzorowaniem wartości). Wektorowana przy użyciu 256-bitowych instrukcji AVX2 wersja pipapo na systemie z procesorem AMD Epyc 7402 wykazała wzrost wydajności o 420% przy analizie 30 tysięcy rekordów, obejmujących pary port-protokół. Wzrost przy dopasowywaniu pary z podsiecią i numerem portu przy przetwarzaniu 1000 rekordów wyniósł 87% dla IPv4 i 128% dla IPv6.

Inna optymalizacja, która pozwala na użycie 8-bitowych grup dopasowania zamiast 4-bitowych, również wykazała zauważalny wzrost wydajności: 66% przy analizie 30 tysięcy rekordów port-protokół, 43% — podsieć_IPv4-port i 61% — podsieć_IPv6-port. W sumie, uwzględniając optymalizacje AVX2, wydajność pipapo wzrosła w wskazanych testach o 766%, 168% i 269% odpowiednio. Otrzymane dla złożonych charakterystyk dopasowań przewyższają kontrole pojedynczych pól w (z wyjątkiem testu pary port+protokół), ale nadal pozostają w tyle za bezpośrednimi kontrolami przy użyciu i obsługiwaczy drop opartych na netdev.

Źródło: opennet.ru
