Проблема со скоростью сети в виртуальном окружении VMWare ESXi 5.
Имеем:
VMWare ESXi 5.1 - standart хост
Windows 7 - гостевая система в виртуальной локальной сети
Kerio Control 8.0 - гостевая система-маршрутизатор, обеспечивающая выход в глобальную сеть для других гостевых систем
В такой конфигурации мы замечаем очень медленную работу с Kerio Control 8.0 по сети. Скорость передачи падает чуть ли не до 10 килобайт в секунду. Диагностика с помощью tcpdump обнаруживает следующее:
IP a.b.c.d > x.x.x.x: ICMP y.y.y.y unreachable - need to frag (mtu 1500), length 556
где a.b.c.d - IP router, x.x.x.x - IP centos_test, y.y.y.y - IP назначения потока данных из глобальной сети. Проанализировав трафик, понимаем - пытается отправить пакет заметно большей длины, чем MTU, на что и получает ответ о необходимости фрагментации. По каким-то причинам виртуальная сетевая карточка не заботится о максимальном размере пакета, как указано на интерфейсе. Как решить проблему? Гугл отправляет искать причины в включенном LRO (large receive offload) в ESXi. Однако никакие рекомендованные манипуляции с настройками (Configuration->Advanced settings->Net), связанными с LRO (Net.VmxnetSwLROSL,Net.Vmxnet3SwLRO,Net.Vmxnet3HwLRO,Net.Vmxnet2SwLRO,Net.Vmxnet2HwLRO и другие), не дали результата. Поиски решения дали понять, что в ESXi есть какие-то ошибки в реализации функциональности LRO и TSO (tcp segmentation offload), которые обнаруживаются в специфичных реализациях. Найти решение на стороне ESXi хоста не удалось, поэтому проблему нужно исправлять на стороне виртуальной машины. Для этого в гостевой системе нужно отключить поддержку tso (в даном конкретном случае этого достаточно) на сетевой карточке.
Например в гостевой системе Windows 7 нужно зайти в настройки сетевой карточки и выключить опцию: “IPv4 - разгрузка большой отправки” для Е1000 и “IPv4 Giant TSO Offload” для vmxnet3.