2017-06-20 4 views
1

J'utilise VirtualBox 5.1 en cours d'exécution dans un hôte avec 48 processeurs et 250 Go de RAM la machine virtuelle que j'importe (l'invité) avait initialement 2 processeurs et 4 Go de RAM.Y a-t-il un nombre maximum de processeurs qu'un VirtualBox peut avoir?

À l'intérieur de cette machine, je cours un processus avec Java qui démarre un nombre dynamique de threads pour effectuer certaines tâches.

je l'ai couru avec les configurations ci-dessous:

tout le processus dans mon ordinateur portable (2CPUs/4 Go de RAM) ~ 11 secondes

même programme dans la machine virtuelle sur le serveur (15 processeurs et 32 ​​Go de RAM) ~ 45 secondes

même programme dans la machine virtuelle sur le serveur (20 processeurs et 32 ​​Go de RAM) ~ 100+ seconde

même programme sur la machine virtuelle dans le ser (10 processeurs et 32 ​​Go de RAM) ~ 5+ secondes

Je pensais d'abord qu'il y avait un problème dans la façon dont je gérais les threads à partir de Java, mais après de nombreux tests, j'ai compris qu'il y avait une relation entre le nombre de cpus que la machine virtuelle a et ses performances, le maximum était 10, après que la performance globale de la machine ralentit (cpu famine?)

la machine virtuelle exécute Oracle Enterprise Linux 6.7 et l'hôte exécute Oracle Enterprise Linux 6.9

Je n'ai pas trouvé de limite stricte dans la documentation de la machine virtuelle concernant le nombre de processeurs

Existe-t-il un paramètre qui doit être défini pour activer/tirer parti de plus de 10 processeurs dans une instance de VirtualBox?

+2

il n'y a pas juste « hôte avec 48 CPU ". Il a plusieurs paquets de processeurs physiques (sockets), donc c'est [NUMA System] (https://en.wikipedia.org/wiki/Non-uniform_memory_access). Selon les tâches que vous exécutez avec java, il peut y avoir des effets limitant l'évolutivité: une tâche de calcul pure avec une faible intensité de la mémoire sera bonne, et travailler avec la mémoire ne sera pas linéaire si le programme a été créé sans tenir compte des effets NUMA. Donc, le problème n'est probablement pas lié à votre solution VM, mais à votre programme Java Dynamic et il aura une évolutivité limitée avec n'importe quelle machine virtuelle ou réelle NUMA. – osgx

+0

Également: y a-t-il eu des utilisateurs de l'hôte VM (ou d'autres machines virtuelles) lorsque vous avez effectué des minutages? Veuillez décrire votre tâche Java, pas la machine virtuelle. – osgx

+0

c'était juste moi sur le système, pas d'autres utilisateurs/processus en cours d'exécution –

Répondre

0

le temps est arrivé depuis que j'ai posté cette question, juste pour l'archive, je vais partager mes conclusions en espérant qu'ils peuvent aider à gagner du temps à quelqu'un d'autre.

il s'avère que les problèmes de performances étaient dus à la façon dont VirtualBox fonctionne en particulier la relation entre le système d'exploitation et l'hyperviseur.

la machine virtuelle (l'OS invité) à la fin est un processus unique pour l'hôte et lorsque vous modifiez le nombre de processeurs dans les paramètres VM ce qu'ils vont faire est de changer le nombre de threads que le processus devra émuler les autres processeurs. (au moins en VirtualBox)

Cela dit, quand j'affecté 10+ CPU à la VM I fini avec:

  • un seul processus avec 10+ fils
  • un système d'exploitation en cours d'exécution émulée centaines des processus
  • mon code Java qui a été crée un tas de fils

tout cela ensemble fait que la configuration a été saturant le processus VM hôte que je pense qu'il était en raison de la façon dont l'OS hôte traitait le changement de contexte de processus

sur mon serveur, la limite dure était de 7 processeurs virtuels, si j'ai ajouté plus que cela, il ralentirait vers le bas les performances du logiciel Java

exécutant le logiciel Java en dehors de la machine virtuelle n'a pas montré de problème de performance, il a travaillé hors de la boîte avec plus de 60 fils isolés