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
lock
prefixo, 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.
fonte
Respostas:
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:
Os SOs convidados:
Informações do teste:
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
fonte
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)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.
fonte
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/
fonte