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

22

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

  • Código de 64 bits do modo de usuário limitado à CPU,

  • Código de 32 bits do modo de usuário com limite de CPU,

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

  • Rede E / S

  • Primitivas de sincronização de thread (exclusões mútuas, semáforos, variáveis de condição)

  • Comutadores de contexto de thread

  • Operações atômicas (usando o prefixo lock , coisas como comparar e alternar)

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

    
por dsimcha 21.04.2011 / 01:48

3 respostas

24

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 rendimento de E / S de 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 sendo 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.

Fica mais complexo ao tentar encontrar relação entre diferentes testes de benchmark. Nenhuma das soluções que testei teve bom desempenho em testes de micro-operações. 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 aplicativos do mundo real e não funcionam bem em micro-operações. Isso pode não ser um problema para seu aplicativo que pode se encaixar melhor como aplicativo do mundo real. Quero dizer, por micro-operação qualquer aplicativo que gasta menos de 1.000 ciclos de clock para terminar (Para uma CPU de 2,6 GHz, 1.000 ciclos de clock são gastos em 385 nanossegundos, ou 3.85e-7 segundos).

Eu fiz extensos testes de benchmark nas quatro principais soluções para consolidação de data centers para arquitetura x86. Eu fiz quase 3000 testes comparando o desempenho dentro das VMs com o desempenho do hardware. Eu chamei de 'overhead' a diferença de desempenho máximo medido dentro de VM (s) com desempenho máximo medido em hardware.

As soluções:

  • VMWare ESXi 5
  • Microsoft Hyper-V do Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

Os sistemas operacionais convidados:

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

Informações de teste:

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

Software de referência:

  • CPU e memória: referência da Linpack para 32 e 64 bits. Isso é intensivo em CPU e memória.

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

  • Rede I / O: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR e UDP_STREAM

  • Micro-operações: rdtscbench : Chamadas de sistema, comunicação entre canais do processo

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

  • CPU e memória: AVERAGE (HPL32, HPL64)

  • E / S de disco: AVERAGE (put_block, rewrite, get_block)

  • E / S de rede: AVERAGE (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Micro-operaçõ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 de VM, convidado do Linux:

  • CPU e memória: 14,36%

  • Rede E / S: 24,46%

  • E / S de disco: 8,84%

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

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

Sobrecarga da camada de VM, convidado do Windows:

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

  • Rede I / O: 35,27%

  • E / S de disco: 15,20%

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

Por favor, dê uma olhada no artigo completo: link

    
por 08.02.2012 / 16:56
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 última CPU com suporte para virtualização, ferramentas VMware com armazenamento paravirtualizado e drivers de rede, muita memória. Agora vamos supor que você execute uma única máquina virtual nessa configuração. Pela minha experiência, você deve ter aproximadamente 90% da velocidade da CPU para carga de trabalho vinculada à CPU. Não posso falar muito sobre velocidades de rede, já que estamos usando links de 1Gbps e posso saturá-lo sem problemas, pode ser diferente com o link de 10Gbps, mas não temos nenhum desses. O throughput de armazenamento depende do tipo de armazenamento, com cerca de 80% do throughput de armazenamento com armazenamento local, mas para NFS de 1 Gbps ele está próximo de 100%, já que a rede é um gargalo aqui. Não é possível informar sobre outras métricas, você precisará fazer experimentos com seu próprio código.

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

Também da 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. No caso do bare metal, ele geralmente leva a CPU para 100%, mas o mesmo servidor no VMware só pode carregar a CPU para 60-80%, e isso ocorre principalmente devido à latência no processamento de solicitações / respostas.

    
por 21.04.2011 / 07:09
0

Eu não pesquisei o desempenho das primitivas básicas como alternância 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 indicativo do que você pode esperar se você estiver com largura de banda de CPU e RAM limitada.

link

    
por 07.08.2012 / 15:25