Les processeurs multicœur présentent de nombreux avantages pour un hôte effectuant des tâches multiples sur des machines virtuelles.

Intel et AMD ont tous deux développé des processeurs combinant deux cœurs de processeur ou plus en un circuit intégré unique (souvent appelé module ou socket). VMware utilise le terme socket pour décrire un module unique pouvant posséder un ou plusieurs cœurs de processeur avec un ou plusieurs processeurs logiques dans chaque cœur.

Par exemple, un processeur double-cœur peut fournir presque le double des performances d'un processeur simple-cœur en permettant à deux CPU virtuels de s'exécuter simultanément. Les cœurs d'un même processeur sont généralement configurés avec un cache de dernier niveau partagé utilisé par tous les cœurs, ce qui peut potentiellement réduire le besoin d'accéder à une mémoire principale plus lente. Un bus de mémoire partagée raccordant un processeur physique à la mémoire principale peut limiter les performances de ses processeurs logiques si les machines virtuelles s'exécutant sur ces processeurs exécutent des charges de travail de mémoire intensives se partageant les mêmes ressources de bus de mémoire.

Tous les processeurs logiques de chaque cœur de processeur peuvent être utilisés indépendamment par ESXi CPU Scheduler pour exécuter des machines virtuelles, ce qui offre des possibilités semblables à celles des systèmes SMP. Par exemple, les processeurs virtuels d'une machine virtuelle à deux voies peuvent s'exécuter sur des processeurs logiques appartenant au même cœur ou sur des processeurs logiques sur différents cœurs physiques.

ESXi CPU Scheduler peut détecter la topologie de processeur ainsi que les relations entre les cœurs de processeur et leurs processeurs logiques. Il utilise ces informations pour programmer les machines virtuelles et optimiser les performances.

ESXi CPU Scheduler peut interpréter la topologie de processeur, y compris les relations entre les sockets, cœurs et processeurs logiques. Le programmateur utilise les informations relatives à la topologie pour optimiser le placement des CPU virtuels sur différents sockets afin d'optimiser l'utilisation globale du cache et améliorer l'affinité de cache en minimisant les migrations de CPU virtuel.

Dans les systèmes sous-dédiés, ESXi CPU Scheduler répartit la charge sur tous les sockets par défaut. Cela améliore les performances en maximisant la quantité cumulée de cache disponible pour les CPU virtuels en cours d'exécution. Par conséquent, les CPU virtuels d'une machine virtuelle SMP unique sont réparties sur plusieurs sockets (sauf si chaque socket est également un nœud NUMA ; dans ce cas, le programmateur NUMA restreint tous les CPU virtuels de la machine virtuelle afin qu'elles résident sur le même socket).

Dans certains cas, par exemple lorsqu'une machine virtuelle SMP affiche un partage de données significatif entre ses CPU virtuels, ce comportement par défaut peut être non optimal. Pour de telles charges de travail, il peut être avantageux de programmer tous les CPU virtuels sur le même socket avec un cache de dernier niveau partagé, même lorsque l'hôte ESXi est sous-dédié. Dans de tels scénarios, vous pouvez ignorer le comportement par défaut répartissant les CPU virtuels entre les modules en incluant l'option de configuration suivant dans le fichier de configuration .vmx de la machine virtuelle : sched.cpu.vsmpConsolidate="TRUE".