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?