เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบฅเบฒเบเบŠเบทเปˆเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™ NetFilter เบˆเบฐเบ–เบทเบเป€เบฅเบฑเปˆเบ‡เปƒเบ™เปเบเปˆเบ™ Linux 5.7

เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฐเบšเบปเบšเบเปˆเบญเบเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ Netfilter เปเบฅเบฐเบ”เบฑเบ”เปเบเป‰เบชเปเบฒเบฅเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ เป€เบœเบตเบเปเบœเปˆ เบŠเบธเบ”เบ‚เบญเบ‡ patches เบ—เบตเปˆเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบฅเบฒเบเบเบฒเบ™เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ (nftables เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰), เป€เบŠเบดเปˆเบ‡เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ subnets, ports เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, protocol เปเบฅเบฐเบ—เบตเปˆเบขเบนเปˆ MAC. Patches เป„เบ”เป‰เบ–เบทเบเบเบญเบกเบฎเบฑเบšเปเบฅเป‰เบงเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฒเบ‚เบฒ nf-เบ•เปเปˆเป„เบ›, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบชเบฐเป€เบซเบ™เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™ Linux 5.7 kernel. เบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบเป‰เบญเบ™ เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบก เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ AVX2 (เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบกเบฑเบ™เบ–เบทเบเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบœเบตเบเปเบœเปˆเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ NEON เบชเปเบฒเบฅเบฑเบš ARM).

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบงเบกเบขเบนเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™ nft_set_pipapo (PIle PAcket POlicies), เป€เบŠเบดเปˆเบ‡เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ arbitrary เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เป€เบŠเบฑเปˆเบ™ IP เปเบฅเบฐเป„เบฅเบเบฐเบžเบญเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ (nft_set_rbtree เปเบฅเบฐ nft_set_hash เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป„เบฅเบเบฐเบซเปˆเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เป‚เบ”เบเบเบปเบ‡เบ‚เบญเบ‡เบ„เปˆเบฒ). เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ pipapo vectorized เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ 256-bit AVX2 เปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบกเบตเป‚เบ›เป€เบŠเบ”เป€เบŠเบต AMD Epyc 7402 เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš 420% เป€เบกเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ 30 เบžเบฑเบ™เบšเบฑเบ™เบ—เบถเบเบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบ›เบฐเบชเบปเบกเบžเบญเบ” - เป‚เบ›เป‚เบ•เบ„เบญเบ™. เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบเบฒเบ™เบฅเบงเบกเบเบฑเบ™เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเปˆเบญเบเปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เบžเบญเบ”เป€เบกเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ 1000 เบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™ 87% เบชเปเบฒเบฅเบฑเบš IPv4 เปเบฅเบฐ 128% เบชเปเบฒเบฅเบฑเบš IPv6.

เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบฅเบฒเบเบŠเบทเปˆเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™ NetFilter เบˆเบฐเบ–เบทเบเป€เบฅเบฑเปˆเบ‡เปƒเบ™เปเบเปˆเบ™ Linux 5.7

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡, เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เปเบฒเปƒเบŠเป‰เบเบธเปˆเบกเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ 8-bit เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ 4-bit, เบเบฑเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™: 66% เป€เบกเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ 30 เบžเบฑเบ™ port-protocol entry, 43% เบชเปเบฒเบฅเบฑเบš subnet_IPv4-port, เปเบฅเบฐ 61% เบชเปเบฒเบฅเบฑเบš subnet_IPv6-port. เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš AVX2, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡ pipapo เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป‚เบ”เบ 766%, 168% เปเบฅเบฐ 269%, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เปเบกเปˆเบ™เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ”เบฝเบง rbtree (เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบžเบญเบ” + เป‚เบ›เป‚เบ•เบ„เบญเบ™), เปเบ•เปˆเบกเบฒเป€เบ–เบดเบ‡เบ•เบญเบ™เบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบŠเบฑเบเบŠเป‰เบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเป‚เบ”เบเบเบปเบ‡เป‚เบ”เบเปƒเบŠเป‰ hashes เปเบฅเบฐเบงเบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ netdev.

เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบฅเบฒเบเบŠเบทเปˆเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™ NetFilter เบˆเบฐเบ–เบทเบเป€เบฅเบฑเปˆเบ‡เปƒเบ™เปเบเปˆเบ™ Linux 5.7

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™