Selección de la cantidad de vCPU y núcleos para una máquina virtual

Al crear máquinas virtuales en diferentes hipervisores (VMWare, KVM, Hyper-V, etc.), es posible que a veces una máquina virtual no vea todos los zócalos de procesador virtual (vCPU) asignados a ella. En nuestro caso, se asignaron 8 vCPU a una máquina virtual KVM y se instaló Windows 10 como sistema operativo invitado. Sin embargo, Windows detectó estas vCPU como procesadores separados (no núcleos) y solo pudo usar 2 de ellos.

Máquina virtual de Windows 10 que usa solo 2 núcleos

Si abre el Administrador de dispositivos de Windows, puede asegurarse de que todos los núcleos asignados estén visibles como 8 procesadores virtuales separados QEMU CPU virtual versión 2.5+.

QEMU Virtual CPU versión 2.5 máquina virtual multiprocesador en KVM

Al mismo tiempo, las propiedades de Windows 10 (Computadora -> Propiedades) y el Administrador de tareas muestran que solo hay disponibles 2 procesadores virtuales QEMU.

La máquina virtual de Windows ve solo 2 procesadores

Significa que Windows 10 solo puede usar 2 núcleos, sin importar cuántos agregue. Al mismo tiempo, un servidor virtual que ejecuta Windows Server 2016 en el mismo hipervisor puede ver las 16 vCPU asignadas.

Número de procesadores admitidos en Windows

El problema es que las versiones de escritorio de Windows (Windows 10/8.1/7) tienen una restricción en el número máximo de procesadores físicos (sockets) una computadora puede usar:

  • Windows 10 Home – 1 CPU
  • Windows 10 Profesional – 2 CPU
  • Estación de trabajo Windows 10: hasta 4 CPU
  • Windows Server 2016: hasta 64 CPU

Sin embargo, esta restricción no está relacionada con el número de núcleos. Para mejorar el rendimiento de su máquina virtual, puede utilizar un procesador con más núcleos. La mayoría de los hipervisores pueden proporcionar vCPU como procesadores, núcleos de procesador o incluso subprocesos. Significa que en lugar de 8 vCPU, puede agregar 2 vCPU (2 sockets) con 4 por socket. Veamos cómo asignar procesadores virtuales como núcleos en diferentes hipervisores y cómo vincularlos a la arquitectura NUMA utilizada en los procesadores modernos.

Administrar Virtual Core y vCPU en KVM

En mi máquina virtual KVM en ejecución ventanas 10todos los núcleos virtuales asignados se consideran procesadores independientes.

Para usar todos los recursos de CPU asignados a una máquina virtual, debe ver un procesador de 8 núcleos, 2 vCPU con 4 núcleos cada uno o 1 vCPU con 4 núcleos en dos subprocesos en lugar de 8 vCPU. Intentemos cambiar la asignación de núcleos virtuales para la máquina virtual KVM.

Apague su máquina virtual:

# virsh shutdown w10testvm – dónde w10testvm es el nombre de su máquina virtual

Muestre la configuración XML actual de la máquina virtual KVM:

# virsh dumpxml w10testvm

Necesitamos un bloque que describa la configuración de la CPU de la VM:

<vcpu placement="static">8</vcpu>
<cputune>
<shares>1000</shares>
</cputune>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch="x86_64" machine="pc-i440fx-rhel7.6.0">hvm</type>
<bootmenu enable="yes"/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>

Como puede ver, aquí se configuran 8 vCPU. Cambiemos la configuración:

# virsh edit w10testvm

Agregue el siguiente bloque después </características>:

<cpu mode="host-passthrough" check='none'>
<topology sockets="1" cores="4" threads="2"/>
</cpu>

Dónde:

  • host-passthrough es el modo de emulación en el que la máquina virtual ve el procesador físico del nodo del clúster
  • sockets="1" indica que hay una vCPU (socket)
  • cores="4" el procesador tiene 4 núcleos por socket
  • threads="2" ieach core tiene 2 hilos

Guarde el archivo de configuración e inicie la máquina virtual. Inicie sesión en la máquina virtual invitada de Windows 10, ejecute el Administrador de tareas o el Monitor de recursos y asegúrese de que Windows vea todos los núcleos virtuales asignados.

sockets virtuales de máquinas virtuales frente a núcleos por socket

Un procesador físico del host, CPU Intel(R) Xeon(R) Plata 4114ahora se muestra en lugar de uno virtual en las propiedades del sistema.

Intel(R) Xeon(R) Silver 4114 CPU multinúcleo en una máquina virtual

Así es como logramos resolver el problema de carga pesada para la máquina virtual, ya que dos núcleos no han sido suficientes para que las aplicaciones funcionen correctamente.

Configuración del número de núcleos por vCPU para una máquina virtual VMWare

Puede cambiar la forma de presentación de vCPU para una máquina virtual VMWare en la interfaz de vSphere Client.

  1. Apague la máquina virtual y abra su configuración;
  2. Ampliar la UPC sección;
  3. Cambie la configuración de la máquina virtual para que el sistema operativo invitado pueda ver 2 procesadores con 4 núcleos cada uno. cambiar el valor Núcleos por zócalo a 4. Significa que el sistema operativo invitado verá dos CPU de 4 núcleos (2 zócalos con 4 núcleos por zócalo); Cambiar la cantidad de núcleos por CPU en una máquina virtual VMWare
  4. Guarde los cambios y ejecute la máquina virtual.

Arquitectura NUMA y vCPU de máquina virtual

Hay algunos aspectos más de la asignación de vCPU y núcleos a máquinas virtuales que debe comprender.

Al asignar el número de núcleos por socket, asegúrese de tener arquitectura NUMA (utilizado en la mayoría de las CPU modernas). No se recomienda asignar más núcleos por socket (y la cantidad total de vCPU) a una VM que la cantidad de núcleos disponibles en su socket físico (nodo NUMA). Cuando se coloca en un solo nodo NUMA físico, una máquina virtual podrá usar la memoria RAM local rápida disponible en el nodo NUMA específico. De lo contrario, los procesos tendrán que esperar la respuesta de otro nodo NUMA (que lleva más tiempo).

Si asigna dos sockets virtuales separados a una VM, el hipervisor puede ejecutarlos en diferentes nodos NUMA. Afectará el rendimiento de la máquina virtual.

Si la cantidad de CPU virtuales necesarias es mayor que la cantidad de núcleos en 1 socket físico (nodo NUMA), cree varios sockets virtuales (procesadores) con la cantidad necesaria de núcleos. Tampoco se recomienda usar un número impar de procesadores (es mejor agregar 1 vCPU).

Permite mantener el rendimiento de la máquina virtual.

número de vCPU de máquina virtual y arquitectura NUMA

Por ejemplo, se recomienda usar la siguiente configuración para un host de 2 procesadores con 10 núcleos por socket (hay 40 vCPU disponibles en total, incluidos Hiperenhebrar) cuando configura vCPU para una VM:

Número de vCPU necesario Número de sockets virtuales en la configuración de la máquina virtual Número de núcleos por procesador virtual en la configuración de la máquina virtual
1 1 1
……
10 1 10
11 No óptimo
12 2 6
……
20 2 10

Por ejemplo, una máquina virtual que ejecuta Microsoft SQL Server 2016 Enterprise Edition con 16 vCPU (en la configuración de 8 zócalos con 2 núcleos por zócalo) tendrá un rendimiento más bajo que una VM con 2 zócalos x 8 núcleos por zócalo.
Recuerde también que algunas aplicaciones tienen licencia según la cantidad de sockets físicos (como en versiones anteriores de SQL Server). A veces, es más rentable licenciar un procesador multinúcleo que varios procesadores con menos núcleos.

Artículos Interesantes