Sviluppatori del sottosistema di filtraggio e modifica dei pacchetti di rete Netfilter un insieme di patch che accelera significativamente l'elaborazione di grandi elenchi di corrispondenza (nftables set), in cui è necessaria la verifica della combinazione di sottoreti, porte di rete, protocolli e indirizzi MAC. Le patch sono già state accettate nel ramo , che sarà proposto per l'inclusione nel kernel di Linux 5.7. Il miglioramento delle prestazioni più significativo è stato ottenuto grazie a di istruzioni AVX2 (in futuro è previsto pubblicare ottimizzazioni simili basate su istruzioni NEON per ARM).
Le ottimizzazioni sono state apportate al modulo (PIle PAcket POlicies), che affronta il problema di mappare il contenuto del pacchetto con intervalli di stato dei campi utilizzati nelle regole di filtraggio, come intervalli IP e porte di rete (nft_set_rbtree e nft_set_hash gestiscono la corrispondenza degli intervalli e la riflessione diretta 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% durante l'analisi di 30.000 record, inclusi l'accoppiamento porta-protocollo. L'incremento nella corrispondenza dell'accoppiamento della sottorete e del numero della porta durante l'analisi di 1000 record è stato del 87% per IPv4 e del 128% per IPv6.

Un'altra ottimizzazione, che consente di utilizzare gruppi di corrispondenza a 8 bit invece di 4 bit, ha mostrato anche un notevole incremento delle prestazioni: 66% durante l'analisi di 30.000 record porta-protocollo, 43% — sottorete_IPv4-port e 61% — sottorete_IPv6-port. In totale, tenendo conto delle ottimizzazioni AVX2, le prestazioni di pipapo sono aumentate nei test indicati del 766%, 168% e 269% rispettivamente. Le caratteristiche ottenute per le corrispondenze complesse superano i controlli di campi singoli in (eccetto il test dell'accoppiamento porta+protocollo), ma al momento sono inferiori rispetto ai controlli diretti effettuati tramite e gestori di drop basati su netdev.

Fonte: opennet.ru
