我有一个与我的服务器packetloss严重问题。 这台服务器是一台运行Debian Squeeze和Xen 4.0的有些旧的(P4时代)机器。 有两个运行在它上面的domU(都是Debian Squeeze),一个网关和一个文件服务器。 不幸的是,处理器没有虚拟化扩展,因此只能使用PV。
在调查为什么我们的networking似乎比我应该发现一些非常糟糕的数据包丢失(〜25%)慢。 经过进一步的调查和几个实验,我做了一个dom0和其中一个domUs之间的测量:
Server listening on UDP port 5001 Receiving 1470 byte datagrams UDP buffer size: 110 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to dom0, UDP port 5001 Sending 1470 byte datagrams UDP buffer size: 110 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.2(domU) port 33817 connected with 192.168.1.100(dom0) port 5001 [ 4] local 192.168.1.2(domU) port 5001 connected with 192.168.1.100(dom0) port 48606 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 46.3 MBytes 38.7 Mbits/sec [ 3] Sent 33020 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 46.2 MBytes 38.6 Mbits/sec 0.030 ms 89/33019 (0.27%) [ 3] 0.0-10.0 sec 1 datagrams received out-of-order [ 4] 0.0-10.2 sec 43.0 MBytes 35.3 Mbits/sec 13.074 ms 11575/42256 (27%)
tl; dr :从dom0到domU的50%UDP数据包丢失率为27%。
同样的事情发生在networking的任何地方。 对于较小的带宽(5Mbit为0.047%),较高的(200Mbit的为59%)会更好。
我确实增加了dom0的CPU重量,没有交换,实际的networking硬件没有涉及。 我从来没有想过Xen(或任何相关的)丢弃数据包,我完全不知道接下来要做什么。
Xen曾经有TCP校验和卸载的问题,但我不确定这是否也用于UDP,并会影响你的testing。 您可以尝试在domU中运行以下命令来禁用此function:
ethtool -K eth0 tx off