不断变化的下载速度与一个复杂的xennetworking设置,为什么?

我的Xen设置中的networkingconfiguration如下:

  • dom0有3个网卡(eth0,eth1,eth2),3个网卡(xenbrE,xenbrI,xenbrD),每个网卡都集成了相应的网卡。 只有xenbrDconfiguration了一个IP地址(192.168.78.2,一个私有局域网)才能与所有的domU进行讨论。
  • 有一个domU是防火墙/路由器,它也包含3个虚拟卡(eth0,eth1,eth2)。 它伪装成在eth0(xenbrE的一部分的外部接口)上出现stream量。

我的问题是,当我在dom0上通过HTTP从互联网下载一个大文件时,下载速度不稳定。 它逐渐boost,然后停顿几秒钟,然后再次重新启动(所有这些都在循环中,直到下载完成)。 在摊位期间,它看起来所有联网在机器上被阻塞(注意在交互式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中运行的(非caching)HTTP代理,则下载速率会稳定在最大值。

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

我怀疑这是networking堆栈中的一个错误,但我希望能够帮助更准确地进行诊断(也许可以find解决办法)。

这是Debian Etch系统,使用Xen 3.2和Debian Lenny的2.6.26-xen-686内核(backports)。 这些网是使用/ etc / network / interfaces创build的:

 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 

xendconfiguration并不复杂:

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

domU的Xennetworking设置完成于:

 # 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中唯一的路由通过xenbrDredirect到了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中,唯一完成的iptablesconfiguration是iptables -t nat -A POSTROUTING -s 192.168.78.0/24 -o eth0 -j MASQUERADE

真的听起来像是一个内存问题,这将解释本地代理也有帮助。 因为它有点让所有东西都停顿,所以也许内核可以赶上处理数据包。 也许通过给Dom0更多的内存来检查。 我在工作中得到了类似的设置,因为我们使用它来进行速度测量,所以我对你所发现的任何东西都很感兴趣(即使我没有经历过这个问题)

也许与xen有关。 但是,除了dom0之外,你可以检查另一个客户吗? 另一个domU工作吗? 这可能是你的NAT设置的问题,就像一个MSS / MTU问题?

如果内存不足,会发生这种情况…检查你的内存使用情况,并检查你的CPU使用情况。 如果你有很多的io_wait,那么获得更多的内存,并分配更多的dom0。