Очень низкая производительность сети в соединениях HyperV, маршрутизируемых через интерфейс VirtualSwitch vEthernet NAT
У меня есть гостевая виртуальная машина Ubuntu 16.04 LTS, работающая внутри HyperV на Win10 pro v1803 (сборка 17134.345). Гость имеет подключение к Интернету через NAT-адаптер виртуального Ethernet на хосте, но TCP-подключения к Интернету очень медленные (<5 КБ / с). Сам хост находится на Wi-Fi, и обычно обеспечивает соединения МБ / с. Как я могу улучшить производительность гостевого трафика?
ВМ находится в двух разных сетях IPV4. Я не настроил IPv6, и это единственная работающая ВМ.
Гость eth0 включен
192.168.20.200/24
, В HyperV этот интерфейс подключен к коммутатору VS с хостом для трафика host-vm. Максимальная пропускная способность на этом канале высока и соответствует ожиданиям. Задержка с хостом составляет <1 мс.гость eth1 включен
192.168.30.200/24
, В HyperV его интерфейс подключен к NAT VSwitch и обеспечивает подключение к Интернету для виртуальной машины. Пропускная способность на этом канале, с точки зрения виртуальной машины, очень медленная, то есть ~5 Кбайт / с при постоянной скорости загрузки. Задержка, с другой стороны, аналогична задержке в диапазоне 8-9 мс для интернет-пингов.
VNat на хосте был создан с PowerShell, используя шаги, описанные в этой статье Microsoft
Я отключил функции разгрузки на гостевой машине, чтобы увидеть, увеличил ли это максимальную пропускную способность, с помощью следующих команд:
for i in rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash; do
sudo ethtool --offload eth1 "$i" off
done
Но это не улучшило гостевую скорость интернета. Я не заметил никакого эффекта. Я попытался перезагрузить хост и виртуальные машины, отключив и повторно включив интерфейс NAT, но это также ничего не улучшило.
Другие детали:
В powershell Get-NetAdapter сообщает следующую основную информацию для vSwitch:
vEthernet (vNAT) Hyper-V Virtual Ethernet Adapter #6 19 Up 00-15-5D-02-E8-0F 10 Gbps
TCP-соединения быстро упадут ниже 5 КБ / с. Apt-get может часами сидеть на небольших упаковках:
0% [3 InRelease 104 kB/109 kB 95%] 2,889 B/s ... Fetched 323 kB in 1min 1s (5,280 B/s)
Дома, speedtest-cli на госте дома сообщает о 1,91 Мбит / с вниз, 13,02 Мбит / с вверх. На хосте это 80 Мбит / с вниз, 20 Мбит / с вверх.
В университете speedtest-cli на гостях сообщает о 5,9 Мбит / с вниз, 8,41 Мбит / с вверх. На хосте 112,53 Мбит / с вниз, 154,13 Мбит / с вверх.
Гостевое ядро - Ubuntu 16.04 (xenial).
Linux host 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
, Похоже, это ядро встроено с драйверами для hyperv, если верить этому списку.
1 ответ
Я нашел правдоподобное объяснение замедления. Я думаю, что это связано с небольшим количеством доступной виртуальной памяти. - хост является средой с ограничением памяти (ноутбук).
Я заметил, что когда я страдаю от этих низких скоростей, в диспетчере задач, процесс Vmmem
находится в оцепенении, потребляя значительную часть доступной виртуальной памяти (~ ГБ) и с относительно высоким использованием ЦП. Я подозреваю, что сетевые буферы запутываются в этом беспорядке, они выгружаются или просто удаляются, потому что они не могут быть помещены в очередь где-либо в памяти.
Я не совсем уверен, что лучший способ заставить Vmmem исправить свое состояние, как только он начнет действовать. Я попытался освободить память, закрыв все приложения на хосте и в виртуальной машине. Также попытался закрыть все виртуальные машины, но он будет продолжать вращаться. Как я уже упоминал в этом вопросе, я также пытался перезагрузить хост, но обычно перезагрузки хоста win10 поддерживают виртуальные машины, поэтому, вероятно, плохое состояние вернется и при новой загрузке хоста.
Один из способов решения этой проблемы - закрыть виртуальную машину в Hyper-V, перезагрузить хост, а затем снова включить виртуальную машину. Вероятно, это не устраняет основную причину (недостаточно swap?, недостаточно mem выделено в hyperv?), Но, по крайней мере, он восстанавливает приличную скорость сети в-vm.
Эти скорости сети, которые я написал в вопросе, повсюду. Я, конечно, не ожидал бы, что RX будет меньше, чем TX при моем асимметричном домашнем интернет-соединении.