Очень низкая производительность сети в соединениях HyperV, маршрутизируемых через интерфейс VirtualSwitch vEthernet NAT

У меня есть гостевая виртуальная машина Ubuntu 16.04 LTS, работающая внутри HyperV на Win10 pro v1803 (сборка 17134.345). Гость имеет подключение к Интернету через NAT-адаптер виртуального Ethernet на хосте, но TCP-подключения к Интернету очень медленные (<5 КБ / с). Сам хост находится на Wi-Fi, и обычно обеспечивает соединения МБ / с. Как я могу улучшить производительность гостевого трафика?

ВМ находится в двух разных сетях IPV4. Я не настроил IPv6, и это единственная работающая ВМ.

  1. Гость eth0 включен 192.168.20.200/24, В HyperV этот интерфейс подключен к коммутатору VS с хостом для трафика host-vm. Максимальная пропускная способность на этом канале высока и соответствует ожиданиям. Задержка с хостом составляет <1 мс.

  2. гость 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 при моем асимметричном домашнем интернет-соединении.

Другие вопросы по тегам