Desempenho ruim da rede com KVM (drivers virtio) - Atualização: com vhost_net

5

Eu configurei várias redes baseadas no KVM antes, e nunca encontrei esse problema, não posso para a vida de mim pensar o que eu tinha configurado de forma diferente anteriormente.

Configuração

Basicamente, tenho e sou inteiramente da Dell Stack:

  • 2x Dell N2024 (switches gigabit empilhados)
  • Vários Dell R720 para Hypervisors KVM
  • 2x Dell R320 para gateway / firewalls

Todas as máquinas rodam CentOS6.5, os hypervisors, basicamente a instalação padrão com alguns ajustes sysctl.

No momento, eu tenho algumas configurações de VMs de teste, com configurações semelhantes às de seus mestres (CentOS 6.X, instalação base com configuração básica baseada em fantoches). Todas as VMs são:

  • Conectado a uma das duas redes fisicamente separadas (por exemplo, cada hypervisor tem duas conexões Ethernet, uma para uma LAN pública / com ponte DMZ, a outra para uma rede privada)
  • Todas as VMs usam o virtio para dispositivos de rede e de bloco (basicamente o resultado padrão da execução do comando virt-install) - por exemplo (exemplo libvirt config)

    <interface type='bridge'>
          <mac address='52:54:00:11:a7:f0'/>
          <source bridge='dmzbr0'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    
  • e todas as VMs têm acesso a 2 a 8 VCPUs e 8 e 64GB de RAM, e suas unidades são volumes de LVM na máquina host

Algumas cópias de arquivo simples dentro da VM, e os testes dd produzem resultados perfeitamente aceitáveis (300MB / s - 800MB / s nesses testes sintéticos de pequena escala)

Desempenho de rede entre máquinas físicas

Eu deixei as configurações do Jumbo Frame / MTU por enquanto, e a transferência de servidor para servidor irá maximizar a conexão gigabit (ou cerca de) ( 100MB / s - > 118MB / s flat em vários testes de arquivos grandes para / de cada máquina)

Desempenho de rede entre uma máquina física e VM (e VM para VM)

Transferência de Rsync / SSH que muda constantemente (instável), mas sempre entre 24MB / se um máximo de cerca de 38MB / s

Eu realizei vários outros testes:  - Entre um IP de máquinas físicas em uma ponte para a VM (em outra ponte)  - Entre um IP de máquinas físicas em uma ponte para a VM (na mesma ponte)  - Tentei iniciar a VM usando drivers de dispositivo e1000 em vez de virtio

Nada parece ter funcionado, alguém já se deparou com uma degradação de desempenho como essa? Acabei de verificar minha rede mais antiga (hospedada em outro DC) e, além do fato de ela usar um switch diferente (um PowerConnect 2824 antigo muito mais barato), o desempenho da rede VM parece estar mais próximo de 80-90% da rede bruta desempenho (não menos da metade)

Se eu puder fornecer qualquer configuração / configuração ou informação extra, estou mais do que feliz em fazê-lo!

Atualização (14/08/2014)

Tentei algumas coisas:

  • Quadros Jumbo habilitados / MTU 9000 na ponte do host e adaptador e VMs (melhoria marginal de desempenho (média acima de 30MB / s)
  • GSO testado, LRO, TSO desligado / ligado no host (sem efeito perceptível)
  • Testou otimizações de sysctl adicionais (aprimorando o rmem / wmem, com aumento sustentado de desempenho de 1-2%)
  • Driver vhost_net testado (pequeno aumento no desempenho)
  • vhost_net driver ativado (como acima) com as mesmas otimizações de sysctl (pelo menos um salto de desempenho de 10-20% anteriormente)
  • de acordo com o guia de otimização de desempenho do redhat, eles mencionaram que ativar multiqueue poderia ajudar, embora eu não tenha percebido nenhuma diferença.

O host parece estar a uma CPU de 125% (para o processo de host), isso poderia ter algo a ver com a atribuição de muitos VCPUs à afinidade de guest ou CPU / Numa?

No entanto, depois de tudo isso, parece que eu aumentei a taxa média sustentada de entre 25-30MB / s para 40-45MB / s. É uma melhora decente, mas tenho certeza de que posso me aproximar do desempenho do bare metal (ainda é uma maneira justa para a metade no momento).

Alguma outra ideia?

    
por kwiksand 13.08.2014 / 11:29

1 resposta

1

Suas instâncias do KVM devem ser capazes de saturar sua conexão de rede sem problemas.

Minha primeira recomendação aqui é atualizar o kernel do host e do guest. O kernel do CentOS 6.5 não possui grande desempenho para o KVM. Eu sugeriria kernel-lt de ELRepo (ou kernel-ml se você estiver se sentindo corajoso). Isso deve dar um impulso decente no desempenho logo de cara.

Em seguida, tente testar com iperf3 (ou até mesmo o iperf mais antigo). Isso lhe dará o mais próximo possível de uma conexão de rede pura. Seus testes de rsync / ssh não são realmente válidos, porque eles definitivamente estão atingindo o disco. RSync especialmente pode não estar fazendo IO sequencial como seu teste dd (tente usar o fio).

O interessante aqui é que o tráfego de VM para VM não atingirá o controlador de rede. Isso será feito apenas no host, então o resto de sua rede (e as várias configurações de transferência) não tem nenhum significado aqui.

Outra coisa a verificar: o seu servidor reduziu os CPUs? Algumas das máquinas da Dell acharam que estavam ociosas e começaram a rodar a CPU com uma velocidade significativamente menor do que deveriam. O material de economia de energia nem sempre reconhece as cargas de trabalho do servidor.

Você definitivamente deseja virtio aqui, nem perca tempo testando as opções emuladas.

Você não mencionou isso, mas se o seu servidor tiver as NICs baseadas no i350, você poderá pesquisar no SR-IOV (supondo que você deseja apenas < = 7 VMs por máquina). Isso dá à VM acesso direto à NIC física (ao custo da perda de funcionalidade, como suporte a nwfilter) e será mais eficiente. Você não precisa disso para obter velocidades de gigabit completas.

    
por 23.08.2014 / 02:15