У меня серьезные проблемы с потерей пакетов на одном из моих серверов. Этот сервер - несколько старая машина (эпохи P4), на которой запущены Debian Squeeze и Xen 4.0. На нем работают два domU (оба также Debian Squeeze), один шлюз и файловый сервер. К сожалению, у процессора нет расширений виртуализации, поэтому можно использовать только PV.
Изучая, почему наша сеть кажется медленнее, чем должна, я обнаружил довольно серьезную потерю пакетов (~ 25%). После дальнейшего исследования и нескольких экспериментов я провел измерение между dom0 и одним из domU:
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: 27% потеря пакетов от dom0 к domU с 50 Мбит UDP-пакетами.
То же самое происходит из любой точки сети. Проблема становится лучше для меньшей полосы пропускания (0,047% для 5 Мбит) и хуже для более высокой (59% для 200 Мбит).
Я увеличил CPU-вес dom0, подкачки не происходит, и фактическое сетевое оборудование не задействовано. Я никогда не ожидал, что Xen (или что-то подобное) сбросит пакеты, и я совершенно не знаю, что делать дальше.
У Xen были проблемы с Разгрузка контрольной суммы TCP, но я не уверен, используется ли это также для UDP и повлияет ли на ваш тест. Вы можете попробовать отключить это, запустив в domU следующее:
ethtool -K eth0 tx off