Los procesadores de varios núcleos ofrecen muchas ventajas para un host que realiza múltiples tareas de máquinas virtuales.

Intel y AMD desarrollaron procesadores que combinan dos o más núcleos de procesador en un solo circuito integrado (a menudo denominado “paquete” o “socket”). VMware utiliza el término socket para describir un solo paquete, que puede tener uno o varios núcleos de procesadores con uno o varios procesadores lógicos en cada núcleo.

Un procesador de dos núcleos, por ejemplo, ofrece casi el doble de rendimiento que un procesador de un solo núcleo, ya que permite la ejecución simultánea de dos CPU virtuales. Por lo general, los núcleos de un mismo procesador se configuran con una memoria caché compartida de último nivel utilizada por todos los núcleos, lo que potencialmente reduce la necesidad de acceder a la memoria principal más lenta. Un bus de memoria compartida que conecta un procesador físico con la memoria principal puede limitar el rendimiento de sus procesadores lógicos cuando las máquinas virtuales que funcionan en ellos ejecutan cargas de trabajo con uso intensivo de memoria, que compiten por los mismos recursos de bus de memoria.

El programador de CPU ESXi puede utilizar de manera independiente cada procesador lógico de cada núcleo de procesador para ejecutar máquinas virtuales, lo que ofrece capacidades similares a los sistemas SMP. Por ejemplo, una máquina virtual bidireccional puede tener sus propios procesadores virtuales en ejecución en procesadores lógicos que pertenecen al mismo núcleo, o en procesadores lógicos de núcleos físicos diferentes.

El programador de CPU ESXi puede detectar la topología del procesador y las relaciones entre núcleos de procesador y los procesadores lógicos en ellos. Esta información se utiliza para programar máquinas virtuales y optimizar su rendimiento.

El programador de CPU ESXi puede interpretar la topología del procesador, incluidas las relaciones entre sockets, núcleos y procesadores lógicos. El programador usa la información de topología para optimizar la selección de ubicación de las CPU virtuales en sockets diferentes. Esta optimización puede maximizar el uso de memoria caché general y mejorar la afinidad de memoria caché al minimizar las migraciones de CPU virtuales.