GoForum › 🌐 V2EX
LXC veth 桥接网络模式下如何避免发送的数据包被拆成小包?
wniming ·
2026-04-18 17:55 ·
0 次点赞 · 3 条回复
网卡是 rtl8127, 用 iperf3 测速,在 host 上测速可以达到 9.42 Gbits/sec ,在 lxc 里测速只有 3.25 Gbits/sec ,造成这么大差异的原因是在 lxc 里发送的数据包被拆成了 1.5KB 的小包(也就是 mtu 的大小),而在 host 上发送的数据包是几十 KB 的大包,我想知道如何让 lxc 里发送的数据包也是几十 KB 的大包,但不知道如何设置,有 v 友对这个问题感兴趣愿意一起研究一下吗?
在 host 上运行 iperf3 发包时 sar 的输出如下:
d@develop:~/test$ sar -n DEV 1 | awk '/IFACE/ && !header_done {print; header_done=1} /enp9s0/'
04:57:43 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
04:57:44 PM enp9s0 19111.00 45161.00 1231.95 1152255.61 0.00 0.00 0.00 94.39
04:57:45 PM enp9s0 19174.00 45152.00 1235.82 1152169.69 0.00 0.00 0.00 94.39
04:57:46 PM enp9s0 19072.00 45156.00 1229.25 1152220.90 0.00 0.00 0.00 94.39
04:57:47 PM enp9s0 18963.00 45156.00 1222.37 1152153.47 0.00 0.00 0.00 94.38
在 lxc 内运行 iperf3 发包时 sar 的输出如下:
d@develop:~/test$ sar -n DEV 1 | awk '/IFACE/ && !header_done {print; header_done=1} /enp9s0/'
04:58:51 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
04:58:52 PM enp9s0 15288.00 277668.00 985.45 410535.09 0.00 0.00 0.00 33.63
04:58:53 PM enp9s0 15290.00 277542.00 985.64 410400.17 0.00 0.00 0.00 33.62
04:58:54 PM enp9s0 15228.00 277660.00 981.49 410523.23 0.00 0.00 0.00 33.63
04:58:55 PM enp9s0 15265.00 277582.00 983.97 410409.32 0.00 0.00 0.00 33.62
用 txkB/s 除以 txpck/s 就能计算出数据包的大小。
我还试了在 linux 虚拟机(使用 tap 设备,桥接网络)里用 iperf3 测发送的速度, 结果和 lxc 里一样被拆成了小包,但是在虚拟机里用 scp 把本机文件拷贝到其他机器时是大包,而 lxc 里 scp 也是小包。
我还试了用 macvlan 替代 veth ,结果 lxc 里不管是 iperf3 还是 scp 都不会拆成小包了,但是如果虚拟机用 macvtap ,不管是 iperf3 还是 scp 都全拆成小包了。
这个问题不仅仅出现在 rtl8127 网卡上,rtl8126 和 rtl8125 网卡都一样,只不过在万兆网络下大包和小包两种情况速度的差距更大。
这个问题我已经让 chatgpt plus 和 gemini 3 pro 分析了很多次了,AI 给的方法全都试了都不起作用,AI 只会让我去调整 tso gso gro 以及 mtu 等等参数,都试了都不起作用,感觉现阶段 AI 还是没有能力分析这种非常复杂的问题。
3 条回复
添加回复
你还需要 登录
后发表回复
物理机能发大包的前提是网卡支持硬件 offload. 系统检测到相关参数启用,内核就不会切片。 我猜测是 lxc 没把这部分驱动带进去。