我的 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 分配更多内存。