Configuración del número de CPU por socket en VMware: Mejores prácticas

Al configurar las opciones del procesador para una nueva máquina virtual, hay varios conceptos clave que entender: cómo calcular el número de núcleos de procesador por CPU y núcleos de CPU por ranura y cómo estos ajustes afectan a la velocidad de las máquinas virtuales. Además, es importante comprender qué asegura un mejor rendimiento de VM: limitar el número de procesadores y tener más núcleos de CPU o tener más procesadores con menos núcleos?

Sigue leyendo para aprender sobre estos conceptos y los principios básicos para la configuración del CPU para máquinas virtuales en hosts ESXi.

Términos

Empecemos con las definiciones de los términos utilizados al configurar las opciones de CPU para máquinas virtuales. Estos términos ayudarán con el funcionamiento del principio y evitarán la confusión sobre el número de núcleos por CPU, núcleos de CPU por ranura y el número de núcleos de CPU frente a la velocidad.

Ranura de CPU

A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.

CPU

A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.

Cuando la velocidad de reloj de los procesadores se acercó a la barrera térmica, los fabricantes cambiaron la arquitectura de los procesadores y comenzaron a producir procesadores con múltiples núcleos de CPU. Para evitar la confusión entre procesadores físicos y procesadores lógicos o núcleos de procesador, algunos proveedores se refieren a un procesador físico como una ranura.

Núcleo de CPU

A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.

Hyper-threading

Hiperprocesamiento es una tecnología desarrollada por ingenieros de Intel para llevar la computación paralela a procesadores que tienen un núcleo de procesador. El debut del hiperprocesamiento fue en 2002 cuando se lanzó el procesador Pentium 4 HT y se posicionó para computadoras de escritorio. Un sistema operativo detecta un procesador de un solo núcleo con hiperprocesamiento como un procesador con dos núcleos lógicos (no físicos). De manera similar, un procesador de cuatro núcleos con hiperprocesamiento parece a un sistema operativo como un procesador con 8 núcleos. Cuantos más hilos se ejecuten en cada núcleo, más tareas se pueden realizar en paralelo.

Los procesadores modernos de Intel tienen tanto múltiples núcleos como hiperprocesamiento. El hiperprocesamiento generalmente está habilitado de forma predeterminada y se puede habilitar o deshabilitar en la BIOS. La simultaneidad de subprocesos múltiples (SMT) de AMD es el análogo del hiperprocesamiento para procesadores AMD.

vCPU

A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.

Sobresuscripción de CPU

Sobresuscripción de CPU es la asignación de más procesadores lógicos (núcleos de CPU del host físico) a máquinas virtuales que el número total de procesadores lógicos disponibles en el host físico. La sobresuscripción de CPU permite una mayor flexibilidad y eficiencia en la utilización de recursos, pero puede llevar a la degradación del rendimiento si la demanda total supera la capacidad física de CPU disponible.

NUMA

NUMA (acceso no uniforme a la memoria) es un diseño de memoria de computadora utilizado en computadoras multiprocesador. La idea es proporcionar memoria separada para cada procesador (a diferencia de UMA, donde todos los procesadores acceden a la memoria compartida a través de un bus). Al mismo tiempo, un procesador puede acceder a la memoria que pertenece a otros procesadores mediante el uso de un bus compartido (todos los procesadores acceden a toda la memoria en la computadora). Una CPU tiene la ventaja de rendimiento de acceder a su propia memoria local más rápido que otra memoria en una computadora multiprocesador.

Estas arquitecturas básicas se mezclan en las computadoras multiprocesador modernas. Los procesadores se agrupan en un paquete o nodo de CPU multinúcleo. Los procesadores que pertenecen al mismo nodo comparten acceso a los módulos de memoria como en la arquitectura UMA. Además, los procesadores pueden acceder a la memoria del nodo remoto a través de un interconectado compartido. Los procesadores lo hacen para la arquitectura NUMA pero con un rendimiento más lento. Este acceso a la memoria se realiza a través de la CPU que posee esa memoria en lugar de hacerlo directamente.

Los nodos NUMA son parejas de CPU/Memoria que consisten en un zócalo de CPU y los módulos de memoria más cercanos. NUMA generalmente se configura en la BIOS como la interleaving de nodos o configuración de memoria interleaved.

Ejemplo: Un host ESXi tiene dos zócalos (dos CPUs) y 256 GB de RAM. Cada CPU tiene 6 núcleos de procesador. Este servidor contiene dos nodos NUMA. Cada nodo NUMA tiene 1 zócalo de CPU (una CPU), 6 núcleos y 128 GB de RAM.

ESXi siempre intenta asignar memoria para una VM desde un nodo NUMA nativo (de origen). Un nodo de origen puede cambiarse automáticamente si hay cambios en las cargas de VM y las cargas del servidor ESXi.

vNUMA

NUMA virtual (vNUMA) es el análogo de NUMA para máquinas virtuales VMware. Un vNUMA consume recursos de hardware de más de un nodo NUMA físico para proporcionar un rendimiento óptimo. La tecnología vNUMA expone la topología NUMA a un sistema operativo invitado. Como resultado, el sistema operativo invitado es consciente de la topología NUMA subyacente para el uso más eficiente. La versión de hardware virtual de una VM debe ser 8 o superior para usar vNUMA.

El manejo de vNUMA se mejoró significativamente en VMware vSphere 6.5, y esta característica ya no está controlada por el valor de núcleos de CPU por socket en la configuración de la VM. De forma predeterminada, vNUMA está habilitado para VM que tienen más de 8 procesadores lógicos (vCPUs). Puede habilitar vNUMA manualmente para una VM editando el archivo de configuración VMX de la VM y agregando la línea numa.vcpu.min=X, donde X es el número de vCPUs para la máquina virtual.

Calculando el número de núcleos

Veamos cómo calcular el número de núcleos de CPU físicos, núcleos de CPU lógicos y otros parámetros en un servidor.

  • El número total de núcleos de CPU físicos en una máquina host se calcula con la fórmula:

    (El número de zócalos del procesador) x (El número de núcleos por procesador) = El número de núcleos del procesador físico

    Solo se deben considerar los zócalos del procesador con procesadores instalados.

  • Si la hiperactivación es compatible, calcule el número de núcleos de procesador lógicos utilizando la fórmula:

    (El número de núcleos de procesador físicos) x (2 hilos/núcleo físico) = el número de procesadores lógicos

  • Finalmente, utilice una fórmula única para calcular los recursos de procesador disponibles que se pueden asignar a las MV:

    (Zócalos de CPU) x (núcleos de CPU) x (hilos)

Por ejemplo, si tiene un servidor con dos procesadores, cada uno con 4 núcleos y compatible con hiperactivación, entonces el número total de procesadores lógicos que se pueden asignar a las MV es:

2(CPUs) x 4(núcleos) x 2(HT) = 16 procesadores lógicos

Un procesador lógico puede asignarse como un procesador o un núcleo de CPU para una MV en la configuración de MV.

En cuanto a las máquinas virtuales, debido a las características de emulación de hardware, pueden utilizar varios procesadores y núcleos de CPU en su configuración para su funcionamiento. Un núcleo de CPU físico puede configurarse como una CPU virtual o un núcleo de CPU virtual para una MV.

  • El total de ciclos de reloj disponibles para una MV se calcula como:

    (El número de zócalos lógicos) x (La velocidad de reloj de la CPU)

Por ejemplo, si configuras una máquina virtual para usar 2 vCPUs con 2 núcleos cuando tienes un procesador físico cuya velocidad de reloj es de 3.0 GHz, entonces la velocidad de reloj total es de 2x2x3=12 GHz. Si se utiliza sobreasignación de CPU en un host ESXi, la frecuencia disponible para una máquina virtual puede ser menor que la calculada si las VM realizan tareas intensivas de CPU.

Limitaciones para núcleos de CPU por socket

Las limitaciones de CPU/núcleos en vSphere 7.0 Update 1 y vSphere 8.0 se enumeran a continuación.

  • El número máximo de sockets de procesador virtual asignados a una máquina virtual es de 768. Si deseas asignar más de 768 procesadores virtuales, configura una máquina virtual para usar procesadores multinúcleo.
  • El número máximo de núcleos de procesador que se pueden asignar a una sola máquina virtual es de 768. Una máquina virtual no puede usar más núcleos de CPU que el número de núcleos de procesador lógicos en una máquina física.
  • Adición en caliente de CPU. Si una máquina virtual tiene 128 vCPUs o menos de 128 vCPUs, entonces no puedes usar la función de adición en caliente de CPU para esta máquina virtual y editar la configuración de CPU de una máquina virtual mientras está en estado de ejecución.Restricciones de CPU del sistema operativo. Si un sistema operativo tiene un límite en el número de procesadores y asignas más procesadores virtuales a una máquina virtual, los procesadores adicionales no son identificados y utilizados por el sistema operativo invitado. Las limitaciones pueden ser causadas por el diseño técnico del sistema operativo y las restricciones de licencia del sistema operativo. Ten en cuenta que hay sistemas operativos que se licencian por socket y por núcleo de CPU (por ejemplo, Windows Server 2019).
  • Restricciones de CPU del sistema operativo. Si un sistema operativo tiene un límite en el número de procesadores y asigna más procesadores virtuales para una VM, los procesadores adicionales no se identifican y se utilizan por el sistema operativo invitado. Las limitaciones pueden deberse al diseño técnico del sistema operativo y a las restricciones de licencia del sistema operativo. Tenga en cuenta que hay sistemas operativos que se licencian por zócalo y por núcleo de CPU (por ejemplo, Windows Server 2019).

Límites de soporte de CPU para algunos sistemas operativos:

  • Windows 10 Pro – 2 CPUs
  • Windows 10 Home – 1 CPU
  • Windows 10 Workstation – 4 CPUs
  • Windows Server 2019 Standard/Datacenter – 64 CPUs
  • Windows XP Pro x64 – 2 CPUs
  • Windows 7 Pro/Ultimate/Enterprise – 2 CPUs
  • Windows Server 2003 Datacenter – 64 CPUs

Puede consultar los límites de configuración para la versión de vSphere utilizada en su entorno en el sitio web de VMware.

Recomendaciones de configuración

Para versiones antiguas de vSphere, recomendamos utilizar zócalos en lugar de núcleos en la configuración de la VM. Al principio, es posible que no observe una diferencia significativa en los zócalos de CPU o los núcleos de CPU en la configuración de la VM para el rendimiento de la VM. Tenga en cuenta algunas características de configuración que hacen la diferencia. Recuerde el NUMA y el vNUMA cuando considere establecer múltiples procesadores virtuales (zócalos) para una VM para tener un rendimiento óptimo.

Si vNUMA no se configura automáticamente, refleje la topología NUMA del servidor físico. Aquí hay algunas recomendaciones para máquinas virtuales en VMware vSphere 6.5 y versiones posteriores:

  • Al definir el número de procesadores lógicos (vCPU) para una VM, prefiera la configuración de núcleos por zócalo. Continúe hasta que el recuento supere el número de núcleos de CPU en un solo nodo NUMA en el servidor ESXi. Use la misma lógica hasta que supere la cantidad de memoria que está disponible en un solo nodo NUMA de su servidor ESXi físico
  • A veces, el número de procesadores lógicos para su configuración de VM es mayor que el número de núcleos de CPU físicos en un solo nodo NUMA, o la cantidad de RAM es mayor que la cantidad total de memoria disponible para un solo nodo NUMA. Considere dividir el recuento de procesadores lógicos (vCPU) en el número mínimo de nodos NUMA para un rendimiento óptimo.
  • No establezca un número impar de vCPU si el recuento de CPU o la cantidad de memoria supera el número de núcleos de CPU. Lo mismo se aplica en caso de que la memoria supere la cantidad de memoria para un solo nodo NUMA en un servidor físico.
  • No cree una VM que tenga un número de vCPU mayor que el recuento de núcleos de procesador físico en su host físico.
  • Si no puede desactivar vNUMA debido a sus requisitos, no habilite la función vCPU Hot-Add.

Si un sistema operativo invitado y otro software instalado en una VM están licenciados por procesador, configure una VM para usar menos procesadores con más núcleos de CPU. Por ejemplo, Windows Server 2012 R2 tiene licencia por socket, y Windows Server 2016 tiene licencia por núcleo.

Si utiliza la sobreasignación de CPU en la configuración de sus máquinas virtuales VMware, tenga en cuenta estos valores:

1:1 a 3:1 – No debería haber problemas en la ejecución de las VM

  • 3:1 a 5:1 – Se observa degradación del rendimiento
  • 6:1 – Prepárese para problemas causados por una degradación significativa del rendimiento
  • La sobreasignación de CPU con valores normales puede utilizarse en entornos de prueba y desarrollo sin riesgos.

Configuración de VM en hosts ESXi

Primero, determine el número de procesadores lógicos (Número de CPUs) de su host físico que se necesita para una máquina virtual para que funcione correctamente con un rendimiento suficiente. Luego defina el número de sockets virtuales con procesadores (Número de Sockets en el Cliente vSphere) y el número de núcleos de CPU (Núcleos por Socket) que debe configurar para una VM teniendo en cuenta las recomendaciones y limitaciones anteriores. La siguiente tabla puede ayudarlo a seleccionar la configuración necesaria.

Primero, determine el número de procesadores lógicos (Número de CPUs) de su host físico que se necesita para una máquina virtual para un trabajo adecuado con un rendimiento suficiente. Luego defina el número de sockets virtuales con procesadores (Número de Sockets en el Cliente de vSphere) y el número de núcleos de CPU (Núcleos por Socket) que debe establecer para una VM teniendo en cuenta las recomendaciones y limitaciones anteriores. La tabla a continuación puede ayudarlo a seleccionar la configuración necesaria.

Si necesita asignar más de 8 procesadores lógicos para una VM, la lógica sigue siendo la misma. Para calcular el número de CPUs lógicos en el Cliente de vSphere, multiplique el número de sockets por el número de núcleos. Por ejemplo, si necesita configurar una VM para usar 2 sockets de procesador, cada uno con 2 núcleos de CPU, entonces el número total de CPUs lógicos es 2*2=4. Esto significa que debe seleccionar 4 CPUs en las opciones de hardware virtual de la VM en el Cliente de vSphere para aplicar esta configuración.

Configurando Núcleos por CPU en el Cliente de vSphere

Expliquemos cómo configurar las opciones de CPU para una VM en VMware vSphere Client. Introduzca la dirección IP de su vCenter Server en un navegador web y abra VMware vSphere Client. En el navegador, abra Hosts y Clusters y seleccione la máquina virtual necesaria que desea configurar. Asegúrese de que la VM esté apagada para poder cambiar la configuración de CPU. El proceso de configuración es idéntico en vSphere 6.x, 7.0 y 8.0.

  1. Haga clic con el botón derecho en la VM y, en el menú contextual, presione Editar Configuración para abrir la configuración de la máquina virtual.
  2. Ampliar la sección CPU en la pestaña Hardware Virtual del cuadro de diálogo Editar Ajustes.
  3. CPU. Haga clic en el menú desplegable en la cadena de CPU y seleccione el número total de procesadores lógicos necesarios para esta VM. En este ejemplo, seleccionamos 4 procesadores lógicos para la VM de Ubuntu (blog-Ubuntu1).
  4. Núcleos por Socket. En esta cadena, haga clic en el menú desplegable y seleccione el número necesario de núcleos para cada socket virtual (procesador).
  5. CPU Hot Plug. Si desea utilizar esta función, seleccione la casilla Habilitar CPU Hot Add. Recuerde las limitaciones y requisitos.

  6. Reserva. Seleccione la asignación mínima garantizada de velocidad de reloj de CPU (frecuencia, MHz o GHz) para una máquina virtual en un host o clúster de ESXi.
  7. Límite. Seleccione la velocidad máxima de reloj de CPU para un procesador de VM. Esta frecuencia es la frecuencia máxima para una máquina virtual, incluso si esta VM es la única VM en ejecución en el host de ESXi o clúster con más recursos de procesador libres. El límite establecido es cierto para todos los procesadores virtuales de una VM. Si una VM tiene 2 procesadores de un solo núcleo y el límite es de 1000 MHz, entonces ambos procesadores virtuales trabajan con una velocidad de reloj total de un millón de ciclos por segundo (500 MHz para cada núcleo).
  8. Acciones. Este parámetro define la prioridad de consumo de recursos por máquinas virtuales (Baja, Normal, Alta, Personalizado) en un host ESXi o grupo de recursos. A diferencia de los parámetros de Reserva y Límite, el parámetro Acciones se aplica a una VM solo si hay escasez de recursos de CPU dentro de un host ESXi, grupo de recursos o clúster DRS.

    Opciones disponibles para el parámetro Acciones:

    • Baja – 500 acciones por procesador virtual
    • Normal – 1000 acciones por procesador virtual
    • Alta – 2000 acciones por procesador virtual
    • Personalizado – establecer un valor personalizado

    Cuanto mayor sea el valor de Acciones, mayor será la cantidad de recursos de CPU asignados para una VM dentro de un host ESXi o un grupo de recursos.

  9. Virtualización de hardware. Seleccione esta casilla de verificación para habilitar la virtualización anidada. Esta opción es útil si desea ejecutar una VM dentro de una VM con fines de prueba o educativos.
  10. Contadores de rendimiento. Esta función se utiliza para permitir que una aplicación instalada dentro de la máquina virtual sea depurada y optimizada después de medir el rendimiento de la CPU.
  11. Afinidad de programación. Esta opción se utiliza para asignar una VM a un procesador específico. El valor ingresado puede ser como este: “0, 2, 4-7”.
  12. I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.

Si utiliza un host ESXi independiente y utiliza el Cliente de host de VMware para configurar VM en un navegador web, el principio de configuración es el mismo que para el Cliente de vSphere de VMware.

Configuración de núcleos por CPU en VMware Workstation

Si se conecta al servidor vCenter o al host ESXi en VMware Workstation y abre la configuración de VM de una VM de vSphere, puede editar la configuración básica de procesadores virtuales.

  1. Haga clic en VM > Configuración, seleccione la pestaña Hardware y haga clic en Procesadores.
  2. Seleccione el número de procesadores virtuales (sockets) y el número de núcleos por procesador.

En la siguiente captura de pantalla, puede ver la configuración del procesador para la misma VM de Ubuntu que se configuró anteriormente en el Cliente de vSphere.

El número total de núcleos del procesador (núcleos lógicos de los procesadores físicos en un host ESXi o clúster) se calcula y muestra automáticamente a continuación. En comparación, en la interfaz del Cliente de vSphere, establece el número total de núcleos del procesador (la opción de CPUs), selecciona el número de núcleos por procesador y luego se calcula y muestra el número de sockets virtuales.Configuración de procesadores de VM en PowerCLI

Configurando Procesadores de VM en PowerCLI

Si prefieres utilizar la interfaz de línea de comandos para configurar componentes de VMware vSphere, utiliza PowerCLI para editar la configuración de CPU de las VM. Aprendamos cómo editar la configuración de CPU de una VM que es Ubuntu 19 en PowerCLI. Las instrucciones se utilizan para VM que están apagadas.

  1. Para configurar una VM para que utilice dos procesadores virtuales de un núcleo (se utilizan dos zócalos virtuales), utiliza el comando:

    get-VM -name Ubuntu19 | set-VM -NumCpu 2

    Introduce otro número si deseas establecer otro número de procesadores (zócalos) a una VM.

  2. En el siguiente ejemplo, verás cómo configurar una VM para que utilice dos procesadores virtuales de dos núcleos (se utilizan 2 zócalos):

    $VM=Get-VM -Name Ubuntu19

    $VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}

    $VM.ExtensionData.ReconfigVM_Task($VMSpec)

    $VM | Set-VM -NumCPU 2

  • Una vez que se aplica una nueva configuración de CPU a la máquina virtual, esta configuración se guarda en el archivo de configuración VMX de la VM. En nuestro caso, verificamos el archivo Ubuntu19.vmx ubicado en el directorio de la VM en el almacén de datos (/vmfs/volumes/datastore2/Ubuntu19/). Las líneas con la nueva configuración de CPU se encuentran al final del archivo VMX.

    numvcpus = “2”

    cpuid.coresPerSocket = “2”

  1. Si necesita reducir el número de procesadores (sockets) para una VM, use el mismo comando que se muestra anteriormente con una cantidad menor. Por ejemplo, para configurar un procesador (socket) para una VM, use este comando:

    get-VM -name Ubuntu19 | set-VM -NumCpu 1

La principal ventaja de usar PowerCLI es la capacidad de configurar múltiples VMs en masa. La automatización de tareas es importante y conveniente si el número de máquinas virtuales a configurar es alto. Utilice los cmdlets de VMware y la sintaxis de Microsoft PowerShell para crear scripts.

Conclusión

El rendimiento de las aplicaciones que se ejecutan en una VM depende de la configuración correcta de la CPU y la memoria. En VMware vSphere 6.5 y versiones posteriores, configure más núcleos en la CPU para las máquinas virtuales y utilice el enfoque de núcleos de CPU por socket. Si utiliza versiones de vSphere anteriores a vSphere 6.5, configure el número de sockets sin aumentar el número de núcleos de CPU para una VM debido al comportamiento diferente de vNUMA en las versiones más nuevas y más antiguas de vSphere. Tenga en cuenta el modelo de licencia del software que necesita instalar en una VM. Si el software está licenciado por CPU, configure más núcleos por CPU en la configuración de la VM.

Al usar máquinas virtuales en VMware vSphere, no olvide usar las herramientas de copia de seguridad de VMware. Utilice NAKIVO Backup & Replication para hacer copias de seguridad de sus máquinas virtuales, incluyendo las VM que tienen múltiples núcleos por CPU. La copia de seguridad regular le ayuda a proteger sus datos y recuperar la información en caso de un desastre.

Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/