Hyper-V Ubuntu 网络问题复制大量数据

Hyper-V Ubuntu 网络问题复制大量数据

我正在尝试通过网络将大量数据(约 50 GB)从运行 Ubuntu 11.04(Natty Narwhal)的 Hyper-V 托管虚拟机复制到另一台(非虚拟)Ubuntu 主机,我计划使用该主机测试我们的某个 Web 应用程序的升级。我遇到的问题与虚拟机有关,我将在下文中将其称为“source.host”。此计算机运行 64 位 Ubuntu Server,其中加载了 2.6.38-8-server 内核和 Microsoft Linux Integration Components for Hyper-V 内核模块(hv_utils、hv_timesource、hv_netvsc、hv_blkvsc、hv_storvsc 和 hv_vmbus)。它使用 Hyper-V“合成网络适配器”作为其网络接口。

为了进行复制,我登录到具有数据的机器并运行以下命令(将远程机器称为“destination.host”)。:

$ cd /path/to/data
$ tar -cvf - datafolder/ | ssh [email protected] "cat > ~/data.tar"

这个过程运行了一段时间,然后在传输了 2-6 GB 的数据后突然停止。source.host 机器上的终端显示错误Write failed: broken pipe。奇怪的是:发生这种情况后,“source.host”机器不再能够与网络的其余部分通信。我无法从“source.host”机器 ping 网络上的任何其他主机,也无法从网络上的任何其他主机 ping“source.host”机器。我同样无法访问“source.host”上托管的任何 Web 服务。

在“source.host”上运行ifconfig显示网络适配器正常运行,具有正确的 IP 地址和一切。我尝试使用以下方法重新启动网络服务:

$ /etc/init.d/networking restart

但问题并没有消失。重新启动计算机使其能够再次与网络通信 - 它可以 ping 通并被其他主机 ping 通,并且 Web 服务也可以正常访问和使用 - 但再次尝试复制操作会导致相同的失败,需要再次重新启动。

作为一个实验,我尝试用直线替换上面的tar--管道:sshscp

$ scp -r datafolder/ [email protected]:~

但无济于事

我认为问题可能与内核数据包发送缓冲区已满有关,因此我尝试将缓冲区大小增加到 12 MB(默认值为 128 KB),

# echo 12582911 > /proc/sys/net/core/wmem_max

但这也没有效果。

我现在猜测这可能是 Microsoft 合成网络驱动程序的问题,但我真的不知道。有人有什么建议吗?

提前非常感谢您!

答案1

如果在 Hyper-V 网络连接上启用了 Broadcom 组合,您是否尝试过禁用它?

我们必须将其设置为主动/被动,因为 broadcom 驱动程序 + linux vm 导致了 mac 地址混淆,并最终导致 Linux 客户机失去所有网络连接,直到重新启动/实时迁移或虚拟网络重新连接。

答案2

您对 hv_netvsc 模块的看法完全正确。此驱动程序的一些显著变化(包括 hv_vmbus)只出现在 2.6.39 和 3.0 中,这两个版本更加稳定。我看到使用这些驱动程序的任何 Ubuntu 和 Debian VM 上经常出现网络停滞或随机崩溃的情况

至少到 2.6.38 为止,我经常看到随机网络丢失,之后它变得更加稳定 - 但仍然不完美。

相关内容