将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:
CONFIG_PREEMPT_NONE=y
tuned-adm profile network-latency
或 network-throughput
irqbalance
,将网卡中断引脚指向特定 CPU在网络/网卡设备/OS等条件满足的情况下, 我们尽可能多地启用这些调优选项, 相关优化项会在后续文章逐一更新. 敬请期待.
今天我们来调优 Cilium, 启用 IPv6 BIG TCP 允许网络协议栈准备更大的 GSO(发送)和 GRO(接收)数据包,以减少协议栈的遍历次数,从而提高性能和延迟.
IPv6 BIG TCP 允许网络协议栈准备更大的 GSO(发送)和 GRO(接收)数据包,以减少协议栈的遍历次数,从而提高性能和延迟。它可减少 CPU 负载,有助于实现更高的速度(即 100Gbit/s 及以上)。为了让这些数据包通过协议栈,BIG TCP 在 IPv6 头之后添加了一个临时的 "逐跳"(Hop-By-Hop)头,并在通过线路传输数据包之前将其剥离。BIG TCP 可在双协议栈设置中运行,IPv4 数据包将使用旧的下限(64k),IPv6 数据包将使用新的较大下限(192k)。请注意,Cilium 假定 GSO 和 GRO 的默认内核值为 64k,只有在必要时才会进行调整,也就是说,如果启用了 BIG TCP,而当前的 GSO/GRO 最大值小于 192k,那么 Cilium 会尝试增加这些值;如果禁用了 BIG TCP,而当前的最大值大于 64k,那么 Cilium 会尝试减少这些值。BIG TCP 不需要更改网络接口 MTU。
由于我这里没有 mlx4, mlx5 型号的网卡, 所以本次无法实战测试了.
要启用 IPv6 BIG TCP:
helm install cilium cilium/cilium --version 1.13.4 \
--namespace kube-system \
--set tunnel=disabled \
--set bpf.masquerade=true \
--set ipv6.enabled=true \
--set enableIPv6Masquerade=false \
--set enableIPv6BIGTCP=true \
--set kubeProxyReplacement=strict
请注意,切换 IPv6 BIG TCP 选项后,必须重新启动 Kubernetes Pod 才能使更改生效。
要验证您的安装是否使用 IPv6 BIG TCP 运行,请在任何一个 Cilium pod 中运行 cilium status
,并查找报告 "IPv6 BIG TCP "状态的行,其状态应为 "enabled"。
这里也顺便提一下"修改 MTU 为巨型帧".
最大传输单位(MTU)会对配置的网络吞吐量产生重大影响。Cilium 将自动检测底层网络设备的 MTU。因此,如果系统配置为使用巨型帧,Cilium 将自动使用巨型帧。
要从中受益,请确保您的系统配置为使用巨型帧(如果您的网络允许)。
因为我的网络设备无法修改为巨型帧, 所以本次也无法实战测试.
本文调优 Cilium, 启用 IPv6 BIG TCP 允许网络协议栈准备更大的 GSO(发送)和 GRO(接收)数据包,以减少协议栈的遍历次数,从而提高性能和延迟.
但是前提条件是 Kernel >= 5.19, 且需要特定网卡支持. 所以本次无法实际验证.
另一项调优为: 修改 MTU 为巨型帧, 以提升网络吞吐量. 但是前提条件是网络允许.
至此,性能调优已完成实战验证:
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.