【发布时间】:2016-02-05 09:38:49
【问题描述】:
我在 Ubuntu 主机上运行了 3 个 QEMU-KVM 虚拟机。每个虚拟机都有一个 virt-io 网卡,并通过主机操作系统中的 br0 网桥连接。每个 NIC 的 MTU 配置为 1500。该平台运行基于消息队列的应用程序:一台 VM 作为生产者,一台 VM 作为消息队列服务器,最后一个 VM 作为消费者。
我的问题是:当客户虚拟机变得忙碌时,消息队列服务器虚拟机可能会偶尔发送大小为 2k、4k 或 5k 的数据包。它超过了网卡的 MTU 值,1500!!!据我所知,Linux IP 堆栈应该在发送之前切割小于 MTU 大小的 IP 帧。为什么这个虚拟机在忙时会发送大数据包?
平台架构如下:
[w2: celery caller (message queue producer) ]
| (messages in TCP)
V
[w3: rabbitmq server]
| (messages in TCP)
V
[w4: celeryd (message queue consumer)]
下面是 w3 的屏幕截图,MTU 为 1500,发送大小 > 2000 的数据包
下面是 w4 的屏幕截图,MTU 为 1500,接收大小 > 2000 的数据包
【问题讨论】:
标签: networking kernel virtualization kvm