Desempenho de rede muito ruim em conexões HyperV roteadas através de uma interface NAT do VirtualSwitch vEthernet

1

Eu tenho uma VM guest do LTS do Ubuntu 16.04 rodando dentro do HyperV no Win10 pro v1803 (build 17134.345). O convidado tem conectividade com a Internet por meio de um Adaptador Ethernet Virtual NAT no host, mas as conexões TCP da Internet são muito lentas (< 5KB / s). O próprio hospedeiro está em wifi e alcança conexões de MB / s comumente. Como posso melhorar o desempenho do tráfego de convidados?

A VM está em duas redes IPV4 diferentes. Eu não configurei o IPv6 e é a única VM em execução.

  1. o convidado eth0 está em 192.168.20.200/24 . No HyperV, essa interface é conectada a um VSwitch com o host, para o tráfego host-vm. A largura de banda máxima nesse link é alta e corresponde às expectativas. A latência com o host é de < 1 ms.

  2. o convidado eth1 está em 192.168.30.200/24 . No HyperV, sua interface é conectada a um NAT VSwitch e fornece conectividade à Internet para a VM. A largura de banda nesse link, da perspectiva da VM, é muito lenta, ou seja, ~ 5 KBytes / s de velocidades de download sustentadas. A latência, por outro lado, é semelhante à do host, na faixa de 8 a 9ms para pings na internet.

O VNat no host foi criado com o powershell, usando as etapas descritas neste artigo da Microsoft

Desativei os recursos de descarregamento no convidado para ver se isso aumentou a largura de banda máxima, com os seguintes comandos:

for i in rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash; do
    sudo ethtool --offload eth1 "$i" off
done

Mas isso não melhorou as velocidades de acesso à Internet. Eu não notei nenhum efeito. Eu tentei reiniciar o host e as VMs, desabilitando e reativando a interface NAT, mas isso também não melhorou perceptivelmente nada.

Outros detalhes:

  • No powershell, o Get-NetAdapter reporta as seguintes informações básicas para o vSwitch:

    vEthernet (vNAT)          Hyper-V Virtual Ethernet Adapter #6          19 Up           00-15-5D-02-E8-0F        10 Gbps
    
  • As conexões TCP ficarão rapidamente abaixo de 5 KB / s. O Apt-get pode ficar por horas em pequenos pacotes:

    0% [3 InRelease 104 kB/109 kB 95%]                               2,889 B/s
    ...
    Fetched 323 kB in 1min 1s (5,280 B/s)
    
  • Em casa, o speedtest-cli no convidado em casa reporta 1.91Mbps para baixo, 13.02Mbps para cima. No host, 80Mbps para baixo, 20Mbps para cima.

  • Na universidade, o speedtest-cli no guest informa 5.9Mbps para baixo, 8.41Mbps para cima. No host, 112,53 Mbps para baixo, 154,13 mbps para cima.

  • O kernel convidado é o 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 . Este kernel parece vir embutido com drivers para hyperv se eu acreditar neste lista .

por init_js 08.11.2018 / 18:24

1 resposta

0

Eu encontrei uma explicação plausível para a desaceleração. Eu acho que está relacionado a ter pouca memória virtual disponível. - o host é um ambiente com restrição de RAM (laptop).

Percebi que quando eu sofro com essas velocidades baixas, no gerenciador de tarefas, o processo Vmmem está em torpor, consumindo uma porção significativa da memória virtual disponível (~ GBs) e com uso de CPU relativamente alto. Eu suspeito que os buffers de rede ficam emaranhados nessa bagunça, eles são trocados ou simplesmente são descartados porque não podem ser enfileirados em qualquer lugar na memória.

Não sei exatamente qual é a melhor maneira de fazer com que o Vmmem conserte seu estado assim que ele começar a agir. Eu tentei liberar memória fechando todos os aplicativos no host e na VM. Também tentei fechar todas as VMs, mas continuaria girando. Como eu mencionei na pergunta, eu também tentei reinicializar o host, mas geralmente as reinicializações do host win10 mantêm as VMs ativas, então, presumivelmente, o estado ruim também retornaria na inicialização do host.

Uma maneira de resolver isso parece ser fechar a VM no Hyper-V, reinicializar o host e, em seguida, restaurar a VM. Provavelmente não conserta a causa raiz (não o suficiente swap ?, não é suficiente mem alocada em hyperv?), Mas pelo menos restaura velocidades decentes de rede em-vm.

Essas velocidades de rede que eu postei na pergunta estão em todo lugar. Eu certamente não esperaria que o RX fosse menor que o TX na minha conexão de internet doméstica assimétrica.

    
por 15.11.2018 / 20:58