使用复杂的 xen 网络设置时下载速率不断变化,为什么?

使用复杂的 xen 网络设置时下载速率不断变化,为什么?

我的 Xen 设置中的网络配置如下:

  • dom0 有 3 个网卡 (eth0, eth1, eth2),3 个 brigde (xenbrE, xenbrI, xenbrD),每个 brigde 都集成了相应的网卡。只有 xenbrD 配置了 IP 地址 (192.168.78.2,私有局域网),以便与所有 domU 通信。
  • 有一个 domU,它是防火墙/路由器,还包含 3 个虚拟卡(eth0、eth1、eth2)。它伪装从 eth0(外部接口,是 xenbrE 的一部分)发出的流量。

我的问题是,当我在 dom0 中通过 HTTP 从互联网下载大文件时,下载速度不稳定。它会逐渐上升,然后停滞几秒钟,然后再次逐渐上升(所有这些都循环进行,直到下载完成)。在停滞期间,似乎机器上的所有网络都被阻止了(在交互式 SSH 会话中注意到)。

dom0                             │domU
     wget                        │
       ↕                         │
eth2↔xenbrD(192.168.78.2)↔vif2.2←┼→eth2(192.168.78.1/24)
                                 │   ↕ masquerading
eth0↔xenbrE↔vif2.0←——————————————┼→eth0(192.168.1.20/24)
internet

如果我进行相同的下载,但使用在防火墙 domU 中运行的(非缓存)HTTP 代理,则下载速率会稳定在其最大值。

我怎样才能避免这个问题?

我怀疑这是网络堆栈中的一个错误,但我希望得到帮助以便更准确地诊断它(并且可能找到解决方法)。

这是 Debian Etch 系统,带有 Xen 3.2 和 Debian Lenny 的 2.6.26-xen-686 内核(反向移植)。使用 /etc/network/interfaces 创建网桥:

auto lo
iface lo inet loopback

auto xenbrE
iface xenbrE inet manual
        bridge_ports eth0
        bridge_maxwait 0

auto xenbrI
iface xenbrI inet manual
        bridge_ports eth1
        bridge_maxwait 0

auto xenbrD
iface xenbrD inet static
        address 192.168.78.2
        netmask 255.255.255.0
        gateway 192.168.78.1
        bridge_ports eth2
        bridge_maxwait 0

xend的配置并不复杂:

# grep '^(' /etc/xen/xend-config.sxp
(network-script network-dummy)
(vif-script vif-bridge)
(dom0-min-mem 150)
(dom0-cpus 0)
(vncpasswd '')

domU 的 Xen 网络设置通过以下方式完成:

# grep vif /etc/xen/xm.slis
vif = [ 'mac=00:16:3e:14:85:11, bridge=xenbrE', 'mac=00:16:3e:14:85:12, bridge=xenbrI', 'mac=00:16:3e:14:85:13, bridge=xenbrD' ]

并且 dom0 中唯一的路由通过 xenbrD 重定向到 domU:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.78.0    0.0.0.0         255.255.255.0   U     0      0        0 xenbrD
0.0.0.0         192.168.78.1    0.0.0.0         UG    0      0        0 xenbrD

在 domU 中,唯一完成的 iptables 配置是iptables -t nat -A POSTROUTING -s 192.168.78.0/24 -o eth0 -j MASQUERADE

答案1

对我来说这听起来确实像是内存问题,这也可以解释本地代理的帮助。因为它会稍微拖延一切,所以也许内核可以赶上处理数据包的速度。也许可以通过给 Dom0 更多内存来检查这一点。我在工作中有一个类似的设置,因为我们用它来测量速度,所以我非常想知道你发现的任何关于它的信息(即使我在这里没有遇到这个问题)

答案2

可能与 xen 有关。但是除了 dom0 之外,您还能检查其他客户端吗?另一个 domU 是否正常工作?这可能是您的 NAT 设置中的问题,例如 mss/mtu 问题?

答案3

如果内存不足,就会发生这种情况...请检查内存使用情况,并检查 CPU 使用情况。如果有大量 io_wait,则获取更多内存并向 dom0 分配更多内存。

相关内容