Degradação do desempenho do VirtualBox ao executar várias VMs em paralelo

3

No Travis CI ( link ) usamos VMs do VirtualBox (através do Vagrant) para executando testes para a comunidade Ruby.

Em nossos servidores de trabalho, temos até (até) N processos paralelos executando o teste N suites em N VMs em paralelo, ou seja, um processo de trabalho executa um conjunto de testes em um VM de cada vez, mas N deles estão sendo executados simultaneamente.

Agora, assim que muitos trabalhadores estão realmente realizando construções em paralelo, desempenho de cada compilação irá degradar significativamente em comparação com quando o muito mesma compilação seria executada em um único trabalhador (e nada mais em execução paralelo).

Aqui está um exemplo:

Esta "matriz de compilação" consiste em 20 construções individuais:

link

No momento em que isso foi executado, havia 10 funcionários em execução, portanto, começou com 10 construções individuais sendo executadas em 10 trabalhadores (e VMs) em paralelo. Esta versão é uma delas e demorou ~ 2 horas para ser concluída:

[veja o último link na lista da página acima, só posso postar 2 URLs]

A mesma compilação levaria apenas ~ 20 minutos quando não há outras construções sendo executado em paralelo. Aqui está um exemplo disso:

link

Essa degradação de desempenho obviamente é algo que precisamos resolver, mas não temos certeza de onde procurar.

O conjunto de testes basicamente executa processos Ruby que podem ser exibidos e gerados vários outros processos Ruby que cada unidade executora testa na base de código. Alguns eles atingem bancos de dados como o MySQL, Sqlite3 e Postgres, mas também percebemos mesmo tipo de degradação com testes que não atingem nenhum banco de dados.

O servidor de trabalho que hospeda esses processos e VMs se parece com isso:

  • Linux 2.6.32-31-server # 61-Ubuntu SMP Sex 8 de abril 19:44:42 UTC 2011 x86_64 GNU / Linux
  • 12x (Hexacore) CPU Intel (R) Core (TM) i7 950 a 3,07GHz
  • Memória de 12 GB

Cada VM:

  • Linux lucid32 2.6.32-28-genérico # 55-Ubuntu SMP seg 10 de janeiro 21:21:01 UTC 2011 i686 GNU / Linux
  • 1x CPU Intel (R) Core (TM) i7 950 a 3,07 GHz
  • 1 GB de memória

Quaisquer dicas sobre como resolver isso ou talvez apenas identificar melhor o problema raiz seria muito apreciada.

Obrigado!

    
por Sven Fuchs 11.07.2011 / 23:41

4 respostas

8

Você não menciona como é o disco subjacente nesses servidores, mas esse tipo de problema de desempenho é quase sempre relacionado a E / S. Quais são as estatísticas de IO que parecem quando você está executando várias compilações versus apenas uma?

Além disso, você obteria um desempenho muito melhor do seu hardware usando algo como o Xen ou o VMware ESXi, em vez do VirtualBox.

    
por 11.07.2011 / 23:55
2

você já tentou modificar o seguinte vm.attributes ?

attribute :cpus

attribute :synthcpu

Eu corri uma vez em problemas durante a paralelização pesada em um VirtualBox vm, que na verdade usava mais encadeamentos do que os que podiam ser servidos pelo host e pela vm configurada. Reduzir a contagem de CPUs virtuais me ajudou nesse momento.

Isso pode ser uma dica de onde procurar ...

Referências aos atributos podem ser encontradas lá:

config.vm.customize: link Atributos da VM: link

Boa sorte ..:)

    
por 12.07.2011 / 15:21
1

Estou um pouco confuso no servidor. O servidor é um CPU cpus de 12 cpu x i7-950? Que caixa pode fazer isso? Se existir, quero um! Você também mencionou hexacore, mas a parte 950 é um quad core. Quantos núcleos reais você tem disponível? Como eu nunca ouvi falar de uma placa de 12x para i7, estou assumindo que você quer dizer que você tem 2 i7-970 (que são hecacore) para um total de 12 núcleos e 12 GB de RAM.

Seu problema parece bem claro para mim. Você está executando o OS + 10 VMs e cada VM é alocada 4 núcleos. São 40 núcleos virtuais e mais 1, pelo menos, para o sistema operacional em uma caixa com 12 núcleos físicos (24 com hyperthreading). Eu esperaria que 2 VMs funcionassem bem nessa configuração e, em seguida, veria uma degradação séria além disso.

Se você realmente tiver o que descreve (12 x i7-950), isso significa 48 núcleos reais, e nesse caso, os problemas são ram ad i / o.

Eu não tenho nenhuma experiência específica com o VirtualBox, mas conheço vmWare e hardware.

Boa sorte

    
por 12.07.2011 / 16:35
0

Eu também suspeitaria de disco io. No entanto, você não mencionou quais verificações você já realizou para isso. topo? vmstat? iostat?

Pode ser interessante plotar a carga da cpu por número de virtualboxes e ver se há uma queda repentina de desempenho. Talvez com dois ou três você tenha um aumento de desempenho linear, mas assim que você acerta, cai. Isso pode muito bem ser causado pela memória io também, que tem os mesmos problemas que o disco io, embora em uma velocidade mais rápida: o software pode não caber mais no cache, então ele precisa pegar o material da memória, que é compartilhada por outros 12 processadores.

apenas meus 2 centavos.

    
por 13.07.2011 / 08:33