Im Linux-Kernel 5.7 werden komplexe Listenabgleichungen in NetFilter beschleunigt.

Entwickler des Netfilter-Subsystems zur Filterung und Modifikation von Netzwerkpaketen haben ein Satz von Patches, die die Verarbeitung großer Matching-Listen (nftables set), die eine Überprüfung der Kombination aus Subnetzen, Netzwerkports, Protokollen und MAC-Adressen erfordern, erheblich beschleunigen. Die Patches wurden bereits in die Branch nf-next, die für die Aufnahme in den Linux-Kernel 5.7 vorgeschlagen wird. Die bemerkenswerteste Beschleunigung wurde durch den Einsatz von AVX2-Instruktionen erreicht (eine ähnliche Optimierung auf Basis von NEON-Instruktionen für ARM ist vorgesehen).

Die Optimierungen wurden in das Modul nft_set_pipapo eingeführt (PIle PAcket POlicies), das die Aufgabe übernimmt, den Inhalt eines Pakets mit den in den Filterregeln verwendeten beliebigen Bereichszuständen der Felder, wie beispielsweise IP- und Netzwerkportbereichen, abzugleichen (nft_set_rbtree und nft_set_hash manipulieren den Abgleich von Intervallen und direkten Wertspiegelungen). Die vektorisierten 256-Bit-AVX2-Version von pipapo auf einem System mit einem AMD Epyc 7402-Prozessor zeigte eine Leistungssteigerung von 420 % beim Parsen von 30.000 Einträgen, darunter Port-Protokoll-Paare. Die Steigerung beim Abgleich eines Paars aus Subnetz und Portnummer beim Parsen von 1.000 Einträgen betrug 87 % für IPv4 und 128 % für IPv6.

Im Linux-Kernel 5.7 werden komplexe Listenabgleichungen in NetFilter beschleunigt.

Eine weitere Optimierung, die die Verwendung von 8-Bit-Matching-Gruppen anstelle von 4-Bit-Gruppen ermöglicht, zeigte ebenfalls einen spürbaren Leistungsschub: 66 % beim Parsen von 30.000 Port-Protokoll-Einträgen, 43 % — Subnetz_IPV4-Port und 61 % — Subnetz_IPV6-Port. Insgesamt, unter Berücksichtigung der AVX2-Optimierungen, erhöhte sich die Leistung von pipapo in den genannten Tests um 766 %, 168 % und 269 % entsprechend. Die für komplexe Abgleiche erzielten Charakteristika übertreffen die Überprüfungen einzelner Felder in rbtree (außer im Test des Port+Protokoll-Paars), liegen aber derzeit hinter direkten Überprüfungen mithilfe von Hashes und Drop-Handlers auf Basis von netdev zurück.

Im Linux-Kernel 5.7 werden komplexe Listenabgleichungen in NetFilter beschleunigt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4