Quanta sobrecarga a virtualização x86 / x64 tem?

24

Quanta sobrecarga a virtualização x86 / x64 (provavelmente usarei o VirtualBox, possivelmente o VMWare, definitivamente não paravirtualização) tem para cada uma das seguintes operações um host Win64 e um convidado Linux64 usando a virtualização de hardware Intel?

  • Código de 64 bits puramente vinculado à CPU e modo de usuário

  • Código de 32 bits puramente vinculado à CPU e modo de usuário

  • Arquivo E / S no disco rígido (eu me preocupo principalmente com a taxa de transferência, não com a latência)

  • E / S de rede

  • Primitivas de sincronização de encadeamentos (mutexes, semáforos, variáveis ​​de condição)

  • Opções de contexto de encadeamento

  • Operações atômicas (usando o lockprefixo, coisas como comparar e trocar)

Estou interessado principalmente no caso x64 assistido por hardware (Intel e AMD), mas não me importo de ouvir sobre a tradução binária não assistida e os casos x86 (ou seja, host e convidado de 32 bits) também. Não estou interessado em paravirtualização.

dsimcha
fonte
(1) "x86" significa 32 bits. Você não poderá executar o código de 64 bits. A virtualização AMD64 (também conhecida como x64) tem limitações diferentes porque requer extensões de hardware. (2) Você quer dizer virtualização x86 por conversão binária (somente x86) ou virtualização assistida por hardware (VT)?
quer
@ Miles: Eu esclareci a pergunta.
dsimcha

Respostas:

26

Descobri que não há uma resposta simples e absoluta para perguntas como a sua. Cada solução de virtualização se comporta de maneira diferente em testes de desempenho específicos. Além disso, testes como a taxa de transferência de E / S do disco podem ser divididos em muitos testes diferentes (leitura, gravação, reescrita, ...) e os resultados variam de solução para solução e de cenário para cenário. É por isso que não é trivial apontar uma solução como a mais rápida para E / S de disco, e é por isso que não há resposta absoluta para rótulos como sobrecarga para E / S de disco.

Torna-se mais complexo ao tentar encontrar relação entre diferentes testes de benchmark. Nenhuma das soluções que testei teve bom desempenho em testes de microoperação. Por exemplo: dentro da VM, uma única chamada para "gettimeofday ()" levou, em média, 11,5 vezes mais ciclos de clock para concluir do que no hardware. Os hipervisores são otimizados para aplicações do mundo real e não apresentam bom desempenho em micro-operações. Isso pode não ser um problema para o seu aplicativo que possa se encaixar melhor como no mundo real. Por microoperação, qualquer aplicativo que gaste menos de 1.000 ciclos de clock para concluir (para uma CPU de 2,6 GHz, 1.000 ciclos de clock são gastos em 385 nanossegundos ou 3,85e-7 segundos).

Fiz testes extensivos de benchmark nas quatro soluções principais para consolidação de data center para arquitetura x86. Fiz quase 3000 testes comparando o desempenho nas VMs com o desempenho do hardware. Chamei de 'sobrecarga' a diferença de desempenho máximo medido dentro de VM (s) e desempenho máximo medido em hardware.

As soluções:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Virtualização da Red Hat Enterprise 2.2

Os SOs convidados:

  • Microsoft Windows 2008 R2 de 64 bits
  • Red Hat Enterprise Linux 6.1 64 bits

Informações do teste:

  • Servidores: 2X Sun Fire X4150, cada um com 8GB de RAM, 2X CPU Intel Xeon E5440 e quatro portas Ethernet de gigabit
  • Discos: discos SAS de 6X 136 GB sobre iSCSI sobre Ethernet de gigabit

Software de referência:

  • CPU e memória: benchmark Linpack para 32 e 64 bits. Isso consome muita CPU e memória.

  • E / S e latência de disco: Bonnie ++

  • E / S de rede: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR e UDP_STREAM

  • Microoperações : rdtscbench : chamadas do sistema, comunicação entre tubulações entre processos

As médias são calculadas com os parâmetros:

  • CPU e memória: MÉDIA (HPL32, HPL64)

  • E / S de disco: MÉDIA (put_block, reescrever, get_block)

  • E / S de rede: MÉDIA (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Microoperações MÉDIA (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simplemath [])

Para o meu cenário de teste, usando minhas métricas, as médias dos resultados das quatro soluções de virtualização são:

Sobrecarga da camada da VM, convidado do Linux:

  • CPU e memória: 14,36%

  • E / S de rede: 24,46%

  • E / S de disco: 8,84%

  • Latência do disco para leitura: 2,41 vezes mais lenta

  • Tempo de execução de micro-operações: 10,84 vezes mais lento

Sobrecarga da camada da VM, convidado do Windows:

  • Média de CPU e Memória para 32 e 64 bits: 13,06%

  • E / S de rede: 35,27%

  • E / S de disco: 15,20%

Observe que esses valores são genéricos e não refletem o cenário de casos específicos.

Consulte o artigo completo: http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions

Peter Senna
fonte
2
Este artigo está desatualizado
dyasny 7/08/12
1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds, não deveria ser uma divisão simples de 1.000 por 2.600.000 para obter o número de segundos que 1.000 ciclos de relógio levam? (que não é 23 milissegundos)
dvdvorle
2
@Sr. Feliz, você está certo. Eu tenho 385 nanossegundos por: 1000/2600000000 = 0.000000385 = 385 nanossegundos. Você concorda com isso? Obrigado por apontar isso.
Peter Senna
@dyasny, estou procurando por hardware para repetir os testes com versões atualizadas. Alguma idéia de onde posso encontrá-lo?
Peter Senna
hardware pode ser facilmente encontrado em uma loja
dyasny
4

Existem muitas variáveis ​​na sua pergunta, mas eu poderia tentar reduzi-la. Vamos supor que você vá com o VMware ESX, faça tudo certo - a mais recente CPU com suporte para virtualização, ferramentas VMware com armazenamento paravirtualizado e drivers de rede, bastante memória. Agora, vamos supor que você execute uma única máquina virtual nessa configuração. Pela minha experiência, você deve ter ~ 90% da velocidade da CPU para a carga de trabalho vinculada à CPU. Não posso falar muito sobre velocidades de rede, já que estamos usando links de 1 Gbps e posso saturá-lo sem problemas, pode ser diferente com o link de 10 Gbps, mas não temos nenhum. A taxa de transferência de armazenamento depende do tipo de armazenamento, com cerca de 80% da taxa de transferência de armazenamento com armazenamento local, mas para NFS de 1 Gbps, é quase 100%, pois a rede é um gargalo aqui. Não é possível contar sobre outras métricas,

Esses números são muito aproximados e dependem muito do seu tipo de carga, hardware e rede. Fica ainda mais confuso quando você executa várias cargas de trabalho no servidor. Mas o que estou tentando dizer aqui é que, em condições ideais, você deve conseguir quase 90% do desempenho nativo.

Também pela minha experiência, o problema muito maior para aplicativos de alto desempenho é a latência e isso é especialmente verdadeiro para aplicativos de servidor cliente. Temos um mecanismo de computação que recebe solicitações de mais de 30 clientes, realiza cálculos curtos e retorna resultados. Normalmente, ele empurra a CPU para 100%, mas o mesmo servidor no VMware pode carregar a CPU apenas entre 60 e 80%, e isso se deve principalmente à latência no processamento de solicitações / respostas.

dtoubelis
fonte
Posso dizer por experiência que saturar um link de 10 GbE com uma única VM é muito difícil. Usamos o VMWare FT, que pode saturar facilmente um link de 1 Gbps por conta própria, acima de 10 Gbe e não chegou nem perto de saturá-lo.
Mark Henderson
0

Não me dediquei ao desempenho das primitivas básicas, como troca de contexto e operações atômicas, mas aqui estão os resultados de um teste de força bruta que realizei recentemente com diferentes hipervisores. Deve ser um indicativo do que você poderia esperar se sua largura de banda da CPU e RAM fosse limitada.

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/

Gordan
fonte
2
É ótimo que você tenha informações sobre o Xen e o KVM ... Mas e os dois hipervisores mais populares ?! Eles estão completamente ausentes. E você incluiu vários hipervisores tipo 2, nenhum SysAdmin sensato usaria isso para produção.
Chris S
Abaixo votado. Link está morto.
Tim Duncklee