Linux 内核 5.7 将加速 NetFilter 中的复杂列表匹配

Netfilter网络数据包过滤和修改子系统的开发者 发表 一组补丁,可显着加快大型匹配列表(nftables 集)的处理速度,这需要检查子网、网络端口、协议和 MAC 地址的组合。 补丁已经被分支接受 nf-下一个,将建议包含在 Linux 5.7 内核中。 最明显的加速是由于 吸引人的 AVX2指令(未来计划针对ARM发布类似的基于NEON指令的优化)。

模块中包含的优化 nft_set_pipapo (PIle Packet POlicies),解决了将数据包内容与过滤规则中使用的任意字段状态范围(例如 IP 和网络端口范围)进行匹配的问题(nft_set_rbtree 和 nft_set_hash 操纵区间匹配和值的直接反映)。 在配备 AMD Epyc 256 处理器的系统上使用 2 位 AVX7402 指令进行矢量化的 pipapo 版本在解析包括端口协议组合在内的 420 万条记录时显示出 30% 的性能提升。 在解析 1000 条记录时比较子网和端口号的组合时,IPv87 的增幅为 4%,IPv128 的增幅为 6%。

Linux 内核 5.7 将加速 NetFilter 中的复杂列表匹配

另一项优化允许使用 8 位匹配组而不是 4 位,也显示出显着的性能提升:解析 66 万个端口协议条目时提升 30%,子网 IPv43 端口提升 4%,子网 IPv61 端口提升 6%。 总的来说,考虑到 AVX2 优化,pipapo 在这些测试中的性能分别提高了 766%、168% 和 269%。 复杂比较获得的特征领先于单字段检查 RB树 (端口+协议测试除外),但到目前为止,它们落后于使用直接检查 哈希值 并删除基于 netdev 的处理程序。

Linux 内核 5.7 将加速 NetFilter 中的复杂列表匹配

来源: opennet.ru

添加评论