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 条回复
geeglo · 2026-04-18 18:05
#1

物理机能发大包的前提是网卡支持硬件 offload. 系统检测到相关参数启用,内核就不会切片。 我猜测是 lxc 没把这部分驱动带进去。

wniming · 2026-04-18 18:15
#2

@geeglo 大佬你说的太笼统了,我想知道做什么设置能直接解决这个问题,刚才我又测试了 win11 虚拟机用 macvtap 桥接网络,结果 iperf3 是小包,但 librespeed 是大包,而 linux 虚拟机用 librespeed 测是小包。

wniming · 2026-04-18 18:15
#3

@wniming #2 linux 虚拟机如果用 tap 设备桥接网络的话, 用 librespeed 测是大包,macvtap 的情况下是小包。

添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: wniming
发布: 2026-04-18
点赞: 0
回复: 0