Sviluppatori del sottosistema di filtraggio e modifica dei pacchetti di rete Netfilter un insieme di patch che accelerano significativamente l'elaborazione di grandi elenchi di corrispondenza (nftables set), in cui Γ¨ necessaria la verifica della combinazione di sottoreti, porte di rete, protocollo e indirizzi MAC. Le patch sono giΓ state accettate nel ramo , che sarΓ proposta per l'inclusione nel kernel Linux 5.7. Il miglioramento delle prestazioni piΓΉ significativo Γ¨ stato ottenuto grazie di istruzioni AVX2 (in futuro si prevede di pubblicare ottimizzazioni simili basate su istruzioni NEON per ARM).
Le ottimizzazioni sono state apportate al modulo (PIle PAcket POlicies), che risolve il compito di abbinare il contenuto dei pacchetti con gli intervalli di stato delle variabili applicabili nelle regole di filtraggio, come gli intervalli IP e delle porte di rete (nft_set_rbtree e nft_set_hash gestiscono l'abbinamento degli intervalli e il diretto riflesso dei valori). La versione pipapo vettorializzata con istruzioni AVX2 a 256 bit su un sistema con processore AMD Epyc 7402 ha mostrato un incremento delle prestazioni del 420% nell'analisi di 30 mila registrazioni, incluse le combinazioni porta-protocollo. L'incremento nell'abbinamento della combinazione subnet e numero di porta nell'analisi di 1000 registrazioni Γ¨ stato del 87% per l'IPv4 e del 128% per l'IPv6.

Un'altra ottimizzazione che consente di utilizzare gruppi di abbinamento a 8 bit invece di 4 bit ha anche mostrato un considerevole incremento delle prestazioni: 66% nell'analisi di 30 mila registrazioni porta-protocollo, 43% per subnet_IPv4-port e 61% per subnet_IPv6-port. In totale, considerando le ottimizzazioni AVX2, le prestazioni di pipapo sono aumentate nei test indicati del 766%, 168% e 269% rispettivamente. Le caratteristiche ottenute per gli abbinamenti complessi superano i controlli dei singoli campi in (eccetto il test della combinazione porta+protocollo), ma sono ancora in ritardo rispetto ai controlli diretti effettuati tramite e gestori di drop basati su netdev.

Fonte: opennet.ru
