Столкнулся с крайне низкой производительностью сети в виртуальных машинах Hyper-V. Конфигурация сервера следующая: физический сервер Dell PowerEdge R620 с 4 сетевыми интерфейсами Broadcom NetXtreme Gigabit. На сервере установлена Windows Server 2012R2 Datacenter с ролью Hyper-V.
При копировании данных на виртуальные машины, запущенные на этом сервере, скорость копирования не поднимается выше 10-12 Мб, хотя гипервизор подключен к быстрой 1 Гб сети.
Причиной проблемы оказался баг в драйвере Broadcom, проявляющийся при включенном режиме VMQ (Virtual Machine Queue). VMQ предназначен для повышения производительности сети на виртуальных машинах, ускоряя передачу сетевых данных с физического адаптера на соответствующую виртуальную машину. Но, похоже, некий баг в драйвере оказывает влияние на некоторые сетевые адаптеры Broadcom, что приводит к значительному снижению производительности сети на всех виртуальных машинах, которые используют виртуальный коммутатор, связанный с соответствующим Broadcom адаптером.
Решение проблемы – отключение VMQ в свойствах сетевых адаптеров на сервере Hyper-V.
Итак, на хостовом сервере Hyper-V откройте в панели управления отройте окно со списком сетевых подключения. Откройте свойства каждого сетевого адаптера Broadcom, который используется в коммутаторе Hyper-V и нажмите кнопку Configure.
Перейдите на вкладку Advanced и найдите в списке параметров Virtual Machine Queues. Измените значение данного параметра на Disabled и сохраните изменения.
При этом подключение к ВМ не поверяется, а в графике сетевого трафика внутри ВМ можно наблюдать резкий рост скорости передачи данных по сети.
VMQ также можно отключить в настройках виртуального коммутатора с помощью PowerShell:
Set-VMNetworkAdapter –ManagementOS -Name <VirtualNetworkAdapterName> -VmqWeight 0
Затем отключим VMQ для каждого адаптера:
Список адаптеров с включенным режимом VMQ
Get-NetAdapterVmq
Отключаем VMQ так:
Set-NetAdapterVmq -Name NIC1,NIC2,NIC3 -Enabled $False