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

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

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

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

  2. гость eth1 находится на 192.168.30.200/24 ​​. В HyperV его интерфейс подключен к VSwitch NAT и обеспечивает подключение виртуальной машины к Интернету. Пропускная способность этого канала с точки зрения виртуальной машины очень низкая, то есть постоянная скорость загрузки ~ 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 Гбит / с Используя шаги, описанные  в этой статье 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 Гбит / с Используя шаги, описанные  в этой статье 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 Гбит / с
        
      • TCP-соединения быстро упадут ниже 5 КБ / с. Apt-get может часами работать с небольшими пакетами:

         0% [3 InRelease 104 kB / 109 kB 95%] 2,889 B / s
        ...
        Получено 323 КБ за 1 мин 1 с (5280 Б / с)
        
      • Дома speedtest-cli на гостевом компьютере сообщает о 1,91 Мбит / с ниже, 13,02 Мбит / с выше. На хосте скорость 80 Мбит / с вниз, 20 Мбит / с.

      • В университете speedtest-cli на гостях сообщает о 5,9 Мбит / с вниз, 8,41 Мбит / с вверх. На хосте: 112,53 Мбит / с вниз, 154,13 Мбит / с.

      • Гостевое ядро ​​- Ubuntu 16.04 (xenial) Хост Linux 4.4.0-138-generic # 164-Ubuntu SMP Вторник 2 октября 17:16:02 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux . Похоже, что это ядро ​​встроено в драйверы для Hyperv, если я верю этому списку .

2
задан 8 November 2018 в 23:29
1 ответ

Я нашел правдоподобное объяснение замедлению. Я думаю, это связано с тем, что виртуальной памяти мало. - хост - это среда с ограничениями по оперативной памяти (ноутбук).

Я заметил, что когда я страдаю от этих низких скоростей, в диспетчере задач процесс Vmmem находится в торпоре, потребляя значительную часть доступной виртуальной памяти (~ ГБ) и с относительно высокой загрузкой ЦП. Я подозреваю, что сетевые буферы запутываются в этом беспорядке, их меняют местами или просто отбрасывают, потому что они не могут быть поставлены в очередь в любом месте памяти.

Я не совсем уверен, как лучше всего сделать Vmmem исправьте его состояние, как только оно начнет действовать. Я попытался освободить память, закрыв все приложения на хосте и на виртуальной машине. Также попытался закрыть все виртуальные машины, но он продолжал вращаться. Как я уже упоминал в вопросе, я также пробовал перезагрузить хост, но обычно перезагрузка хоста win10 поддерживает работу виртуальных машин, поэтому, вероятно, плохое состояние вернется и при новой загрузке хоста.

Один из способов решить эту проблему - закрыть виртуальную машину в Hyper-V, перезагрузите хост и затем снова включите виртуальную машину. Вероятно, это не устраняет основную причину (недостаточно подкачки?, Недостаточно памяти, выделенной в HyperV?), Но, по крайней мере, он восстанавливает приличную скорость сети в виртуальной машине.

Эти скорости сети, которые я указал в вопросе, повсюду место. Я бы определенно не ожидал, что RX будет меньше TX при моем асимметричном домашнем интернет-соединении.

0
ответ дан 3 December 2019 в 13:51

Теги

Похожие вопросы