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

16

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

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

Outro exemplo: se eu virtualizar 1000 máquinas, mesmo que sejam usadas 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 virtualização com base na carga de trabalho da máquina ou no grande número de máquinas convidadas quando comparadas aos recursos do host?

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

kvista
fonte
11
mesmo em algumas tarefas ligadas à CPU, há um ponto para a virtualização - permitindo que os usuários enviem tarefas para clusters, pois as imagens de VM permitem um controle muito maior sobre o ambiente em que as tarefas são executadas do que seria possível com apenas um agendador de lotes simples, por exemplo.
Flexo 23/01
Mas, em algum momento, o agendamento da "execução da VM" parece uma sobrecarga desnecessária quando já é difícil o suficiente agendar encadeamentos em uma única VM, estou certo?
Kvista

Respostas:

13

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 hóspede estiver em produção, provavelmente precisará de uma resposta rápida às consultas da 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.

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

Não se preocupe com o IO da CPU. Dessa forma, a virtualização é muito eficiente, geralmente relacionada como apenas vários processos em execução no mesmo sistema. Raramente vejo sistemas multi-xeon rodando 100% na CPU.

editar: erros de digitação

Antti Rytsölä
fonte
3
disco de heavy I / requisitos S seria a razão # 1 para não Virtualizar - é o recurso mais atingidos pela virtualização penalidades, consulte codinghorror.com/blog/2006/10/...
Jeff Atwood
Obrigado - ambos os comentários são úteis. Basta saber se alguém sabe por que o alto uso do disco é problemático para virtualizar? Por que os engenheiros de virtualização ignorariam esse problema relativamente básico? Ou é fundamentalmente mais complexo que a virtualização da CPU?
Kvista
Nota - @ Jeff, estou lendo sua postagem no blog de 2006 e suponho que explicará por que melhor (ou seja, reserva de eixo), mas minha pergunta para designers / implementadores de virtualização permanece a mesma - isso é fundamentalmente problemático para virtualização em uma maneira de virtualização da CPU não é?
Kvista
3
Existem tantas buscas que um disco rígido pode fazer. Para um disco rígido de 5 ms, seriam 200 buscas por segundo. E, geralmente, quando um sistema operacional copia arquivos ou verifica diretórios, ele sempre usa 100% do disco io. Durante esse período, todas as pequenas solicitações do disco estão atrasadas e há muitas. Os buffers do sistema de arquivos também são desperdiçados devido à cópia. Pode-se dizer que nosso conceito de funcionamento do sistema operacional depende de um disco rígido ocioso.
Antti Rytsölä
11
Obrigado. Eu acho que seria interessante ver se os SSDs alteram essa equação. Mas agora estamos chegando muito longe no modo de discussão. Entendi - obrigado a todos.
kvista
15

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 cobranças 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 colocar em uma VM:

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

  • Tudo o que será afinado para fazer uso dos recursos. Quando você realmente começa a ajustar um banco de dados, as VMs que competem por recursos realmente lançam uma chave no trabalho.

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

Existem algumas coisas impressionantes para colocar em VMs:

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

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

  • Projetos / aplicações que começam pequenos, mas crescem. É muito mais fácil adicionar recursos a uma VM (bem como migrar para um 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 ESX, Xen, KVM. Você se sairá muito melhor do que usar VMware ou caixa virtual no Windows.

Cakemox
fonte
11
+1 comentários organizados muito úteis - obrigado!
Kvista
Mais um comentário - mesmo que eu use o ESX, etc, presumo que em algum momento não faça sentido colocar máquinas X em um host principal Y. Quais são as boas regras de ouro? Presumo que os white papers da virtualização s / w em algum lugar devam solucionar esse problema, mas, infelizmente, não consigo encontrá-lo facilmente.
Kvista
11
Para o VMware, você pode começar aqui: vmware.com/technology/whyvmware/calculator
Cakemox
Para referência: pelo link VMWare acima, você pode configurar até 30 VMs por CPU. O padrão é 6 VMs por CPU.
Alex Yursha
4

Existem dois pontos no desempenho da virtualização.

  • gargalo compartilhado
  • emulação

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

Penso que a principal questão para o desempenho bruto (principalmente a interatividade) é perguntar quais partes do sistema de virtualização são emuladas. Isso difere dependendo da configuração. Disco e rede são os candidatos típicos. Como regra geral, a emulação dobra o "custo" de desempenho de executar uma ação, portanto, qualquer tempo de latência de hardware deve ser contado duas vezes e qualquer número de thruput deve ser dividido pela metade.

Bittrance
fonte
11
os números que vi foram CPU em 96-97%, rede em 70-90%, e disco em 40-70% (de nu metal)
Jeff Atwood
11
O comentário de uma regra geral é útil.
kvista
2

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

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

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

Gordan
fonte
1

Boa resposta do anttiR.

Além disso, sistemas de tempo crítico. Acabei de descobrir que a podridão do Hyper-V centavo (vm ficando lentamente para trás, todos os SOs modernos nas vm fazem isso, ressincronizam com frequência) não está funcionando muito bem com alguns aplicativos críticos que estou desenvolvendo. Além disso, vou usar "muita" CPU lá e planejando obter uma máquina de 12 núcleos apenas para esse aplicativo em produção.

TomTom
fonte
O Asterisk é um desses aplicativos. Você visualiza algumas coisas muito estranhas durante as chamadas em conferência.
Ryaner
Eu tenho o problema com a estabilidade do relógio para gravações de dados;) Graças a Deus, recebo um carimbo de data / hora confiável no feed de dados, mas descobrir se há problemas na rede é difícil quando o relógio do sistema não é estável.
TomTom