利用Linux Flowtables优化网络性能
Ubicloud构建开源云服务替代AWS时,大量使用Linux KVM运行虚拟机。其网络栈需提供传输加密、动态IPv4分配和灵活防火墙规则。加密可通过网卡卸载实现,而IPv4分配与防火墙则依赖Linux的Netfilter/Nftables子系统。为节省CPU周期,团队探索了flowtables——一种内核网络加速功能,其作用类似于路由缓存,能记住特定连接的路由决策,从而减少重复的包处理步骤。
背景:Ubicloud的网络架构
Ubicloud采用控制平面与数据平面分离的模式。控制平面管理数据模型并协调变更;数据平面使用开源软件,在Linux主机上执行网络规则。防火墙规则和IPv4分配通过Netfilter实现:防火墙使用包过滤功能,IPv4分配则使用网络地址转换(NAT)功能。
防火墙规则示例
以允许VM(IP:12.12.12.12)的TCP端口5432流量为例。当数据包到达主机时,经路由查转发至VM,并经过Netfilter的pre-routing、routing、forward、post-routing等钩子。在forward阶段应用预设的过滤规则(如ip saddr 0.0.0.0/0 tcp dport 5432 ip daddr 12.12.12.12 accept),若匹配则通过,否则执行表策略动作。该流程涉及多个处理阶段,存在优化空间。
Flowtables的优化原理
Flowtables通过缓存连接状态的处理决策来优化包转发路径。启用后,内核无需为每个数据包重复执行路由查找、规则匹配等步骤,从而降低CPU使用率,提升网络吞吐量和降低延迟。其与Netfilter集成良好,启用过程简单。
实现效果
在Ubicloud的数据平面中引入flowtables仅需7行代码。为验证效果,团队使用PostgreSQL的pgbench工具进行基准测试。测试在宿主机上运行,以隔离网络跳变影响,专注于测量一次SELECT查询的端到端延迟。
- 未启用flowtables时,平均延迟为0.127毫秒。
- 启用flowtables后,平均延迟降至0.118毫秒,降低了7.5%。
基准测试说明
测试采用单客户端、单线程配置,以突出网络处理优化的效果。实际场景中延迟收益可能略低(因测试未计入真实网络延迟),但flowtables对CPU周期的节省可能比延迟改善更重要。
结论
Ubicloud通过在其数据平面引入Linux内核的flowtables功能,以极小的代码改动(7行)实现了显著的网络性能提升(延迟降低7.5%)。该优化基于Netfilter/Nftables的可靠框架,展示了flowtables在云环境网络处理中的价值。团队持续探索网络层改进,以提升整体系统效率。
注:本文技术参考来自Andrej Stender的博客文章《Flowtables: A Netfilter nftables Fastpath》。