Então, realmente, qual é a sobrecarga da virtualização e quando devo me preocupar?

13

Estou procurando boas regras práticas para entender quando NÃO virtualizar uma máquina.

Por exemplo, eu sei que um processo totalmente limitado pela CPU com quase 100% de utilização provavelmente não é uma boa idéia para virtualizar, mas há algum sentido em executar algo que aproveita a CPU na maioria das vezes uma "quantidade substancial" (digamos 40 ou 50%)?

Outro exemplo: se eu virtualizar 1000 máquinas, mesmo que elas sejam usadas apenas de maneira leve ou moderada, provavelmente seria ruim executar tudo isso em um host com apenas 4 núcleos.

Alguém pode resumir dicas sobre a virtualização com base na carga de trabalho da máquina ou no grande número de máquinas convidadas quando comparado aos recursos do host?

Normalmente virtualizo em hosts do Windows usando o VirtualBox ou o VMWare, mas suponho que essa seja uma pergunta bastante genérica.

    
por kvista 23.01.2011 / 09:23

5 respostas

12

Subsistema de disco. Geralmente, esse é o recurso menos compartilhável. Memória, claro, mas essa é aparente.

As limitações do subsistema de disco funcionam nos dois sentidos. Se um sistema usa muita E / S de disco, outros convidados ficam mais lentos. Se este convidado está em produção, provavelmente precisa de uma resposta rápida às consultas na web. Isso pode ser muito frustrante e também um grande motivo para não alugar hardware virtual. Você pode minimizar esse problema usando discos dedicados.

O uso de apenas 512 MB de memória em Convidados coloca todo o cache de disco no host. E não é igualmente dividido entre convidados.

Não se preocupe com o I / O da CPU. Desta forma, a virtualização é muito eficiente, muitas vezes relacionada como apenas vários processos em execução no mesmo sistema. Eu raramente vejo sistemas multi-xeon funcionando 100% na CPU.

edit: erros de digitação

    
por 23.01.2011 / 10:18
12

Coisas que eu nunca colocaria em uma VM:

  • Qualquer coisa que use hardware específico que não possa ser virtualizado: geralmente gráficos, alguns módulos de segurança de hardware, qualquer coisa com drivers personalizados (drivers de rede para fins especiais, por exemplo).

  • Sistemas com problemas de licença. Algumas cargas de software por CPU ou núcleo físico, não importa quão poucas você tenha alocado para a VM. Você seria atingido em uma auditoria se tivesse um software licenciado para um único núcleo em execução em uma VM em um servidor de 32 núcleos.

Coisas que eu desencorajaria a colocar em uma VM:

  • Software que já faz um esforço para usar todos os recursos em hardware de commodity. Máquinas que trabalham como parte de um esforço de "big data", como o hadoop, são tipicamente projetadas para rodar em metal puro.

  • Qualquer coisa que será ajustada para usar recursos. Quando você realmente começa a sintonizar um banco de dados, as VMs que disputam os recursos realmente vão soltar o trabalho.

  • Qualquer coisa que já tenha um grande gargalo. Ele já não joga bem consigo mesmo, provavelmente não vai jogar bem com os outros.

Há algumas coisas bastante impressionantes para colocar em VMs:

  • Qualquer coisa que gasta muito tempo ocioso. Os hosts de utilitários, como o correio e o DNS, têm dificuldade em gerar carga suficiente no hardware moderno para garantir servidores dedicados.

  • Aplicativos que não escalam bem (ou facilmente) por conta própria. O código legado frequentemente se enquadra nessa categoria. Se o aplicativo não for expandido para ocupar o servidor, use muitos pequenos servidores virtuais.

  • Projetos / aplicativos que começam pequenos mas crescem. É muito mais fácil adicionar recursos a uma VM (bem como migrar para hardware maior e mais novo) em vez de iniciar no bare metal.

Além disso, não tenho certeza se você está exagerando em colocar um grande número de VMs em um único host, mas se estiver tentando uma grande proporção de VM: HW, convém considerar o ESX, o Xen e o KVM. . Você se sairá muito melhor do que usando o VMware ou o VirtualBox no Windows.

    
por 23.01.2011 / 12:42
3

Existem dois pontos no desempenho da virtualização.

  • gargalo compartilhado
  • emulação

Em gargalos compartilhados, quem mais está no mesmo ferro? Se você estiver em um ambiente virtualizado, depende muito do parceiro de hospedagem ser honesto com você.

Eu acho que a questão principal para o desempenho bruto (particularmente interatividade) é saber quais partes do sistema de virtualização são emuladas. Isso difere dependendo da configuração. O disco e a rede são os candidatos típicos. Como regra geral, a emulação dobra o "custo" de desempenho da execução de uma ação, portanto, qualquer tempo de latência de hardware deve ser contado em dobro e qualquer número de thruput deve ser reduzido pela metade.

    
por 23.01.2011 / 12:17
1

Boa resposta do anttiR.

Além disso, sistemas críticos de tempo. Eu acabei de descobrir que a podridão do Hyper-V dime (vm lentamente ficando para trás, todos os sistemas operacionais modernos em vm fazem isso, são ressincronizados com frequência) não está jogando bem com alguns aplicativos críticos de tempo que estou desenvolvendo. Além disso, vou usar uma cpu "muito" e planejar uma máquina de 12 núcleos apenas para aquela aplicação em produção.

    
por 23.01.2011 / 11:27
1

Por fim, qualquer carga de alto desempenho não deve ser virtualizada. Os overhads de desempenho da virtualização não são triviais. Veja os resultados dos meus testes aqui:

link

OTOH, se você estiver procurando consolidar várias máquinas que estão ociosas o tempo todo, a virtualização é o caminho a seguir.

    
por 07.08.2012 / 15:31