J'essaie de trouver de la documentation ou des guides de bonnes pratiques pour la virtualisation en ce qui concerne le provisionnement de processeurs virtuels par cœur physique (d'un processeur). Si cela importe, je regarde vmWare pour l'implémentation de la virtualisation. Par exemple, un processeur Intel Xeon peut avoir 4, 8, etc. cœurs. Je souhaite en savoir plus sur l'approvisionnement au-delà d'un seul vCPU par cœur physique. Le fournisseur avec qui je parle pense définitivement qu'un seul cœur peut être provisionné en plusieurs processeurs virtuels.
Ce que je vois couramment dans mes recherches jusqu'à présent, c'est: "Eh bien, cela dépend de votre application." Et dans ce cas, mon application édite du code, compile/lie, teste et gère la configuration. Bien sûr, toutes les machines virtuelles n'ont pas besoin d'être configurées avec plusieurs vCPU par cœur, mais dans le cas général.
Un seul CPU physique peut être utilisé comme autant de vCPU. Vous manquez rarement de ressources CPU dans les solutions de virtualisation. RAM et stockage sont toujours les facteurs limitants ...
Rappelez-vous, dans VMware, l'utilisation du CPU est représentée en MHz utilisé, pas les cœurs ... À moins que vous ne fixiez tous vos CPU virtuels à 100% TOUT LE TEMPS , je ne pense pas que votre fournisseur soit correct.
Regardons le cluster de systèmes suivant ...
d'un autre cluster actif - 3 hôtes 42 machines virtuelles
Pour développer l'écriture d'ewwhite, à moins que vous n'ayez des applications qui peuvent explicitement tirer parti de plusieurs vCPU ou de plusieurs cœurs par vCPU, il n'y a absolument aucun avantage à allouer plusieurs vCPU/cœurs à une machine virtuelle. En fait, le plus souvent, vous vous retrouverez avec des performances inférieures au lieu de s'exécuter sur un seul vCPU auquel un cœur est affecté, en partie en raison de la surcharge de planification requise pour exécuter plusieurs vCPU.
FWIW, dans un environnement VDI, le nombre souvent cité est de 5 processeurs virtuels par cœur physique. Bien sûr, cela tient compte des ordinateurs de bureau. Si vos machines virtuelles sont très occupées à compiler du code tout le temps, vous ne pourrez peut-être pas installer 5 vCPU par cœur physique.
La raison pour laquelle tant de gens disent que "ça dépend" est parce que c'est vraiment le cas. Examinez vos valeurs CPU Ready et décidez ensuite si vous pouvez augmenter la charge CPU sur un système particulier. CPU Ready est une mesure du vCPU prêt à exécuter une commande, mais il doit attendre que le temps CPU physique soit disponible.
Dans votre cas, si vous compilez de gros programmes, il est tout à fait possible que vos machines virtuelles aient réellement besoin de beaucoup de temps processeur. Comme l'a noté ewwhite, normalement la virtualisation a tendance à être des E/S disque et RAM contrainte plutôt que contrainte CPU cependant.
Le problème sous-jacent est fondamentalement le même que pour la planification de processus sur un système physique. Tant que la charge du système est inférieure au nombre de cœurs (ou même de processeurs logiques, en cas d'HyperThreading), tout va bien et les processeurs peuvent gérer la charge.
Donc, tant que la charge simultanée sur tous les processeurs virtuels utilisés ne dépasse pas la charge qui peut être gérée par vos cœurs physiques, tout va bien.
Pour vos demandes, seule la compilation est un travail gourmand en ressources processeur, qui n'est nécessaire que de temps en temps. Pour les VM de compilateur, nous allouons autant de CPU que possible. Donc, s'il est nécessaire de compiler, cela se fera le plus rapidement possible (si votre compilateur prend en charge la compilation parallèle).
Cela peut ne pas être vrai pour une machine virtuelle de compilation qui est sous une charge constante (par exemple, si vous fournissez un service Internet pour effectuer des compilations et qui est constamment utilisé).
Une règle générale que j'ai vue (peut-être dans la documentation de VMware) est de ne pas allouer plus de cœurs à un VM qu'il n'en existe physiquement sur l'hôte, car cela entraînerait l'émulation de plusieurs vCores sur un monocœur, ajoutant des frais généraux inutiles.