Mejor práctica: vCPU por núcleo físico

27

Estoy tratando de encontrar documentación o guías de mejores prácticas para la virtualización con respecto al aprovisionamiento de vCPU por núcleo físico (de una CPU). Si es importante, estoy mirando vmWare para la implementación de virtualización. Por ejemplo, una CPU Intel Xeon puede tener 4, 8, etc. núcleos. Estoy interesado en aprender más sobre el aprovisionamiento más allá de solo una vCPU por núcleo físico. El proveedor con el que estoy hablando definitivamente piensa que un solo núcleo se puede aprovisionar en múltiples vCPU.

Lo que comúnmente veo en mi investigación hasta ahora es: "Bueno, depende de su aplicación". Y en ese caso, mi aplicación está editando código, compilando / vinculando, probando y gestionando la configuración. Por supuesto, no todas las máquinas virtuales deben configurarse con múltiples vCPU por núcleo, pero en el caso general.

Dr. Watson
fuente

Respuestas:

24

Una sola CPU física se puede utilizar como muchas vCPU. Raramente se quedan sin recursos de CPU en soluciones de virtualización. La RAM y el almacenamiento son siempre los factores limitantes ...

Recuerde, en VMware, la utilización de la CPU se representa en MHz utilizado, no en núcleos ... A menos que esté vinculando todas sus CPU virtuales al 100% TODO EL TIEMPO , no creo que su proveedor sea correcto.

Veamos el siguiente grupo de sistemas ...

  • 9 hosts ESXi.
  • 160 máquinas virtuales
  • 104 núcleos físicos de CPU en el clúster.
  • El perfil promedio de la máquina virtual es: 4 vCPU y 4GB a 18GB RAM.
  • La CPU puede suscribirse de forma segura ... pero recuerde, también puede ser limitada, reservada y priorizada a nivel de VM.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

desde otro clúster activo: 3 hosts 42 máquinas virtuales ingrese la descripción de la imagen aquí

ewwhite
fuente
44
Después de ver 3936 migraciones de vMotion, no me siento tan mal por nuestros 1,200
Mark Henderson
2
Ayer estuve viendo las estadísticas en nuestro clúster de VM que confirman las cifras proporcionadas por @ewwhite. Tenemos 3 hosts, con un total de 24 procesadores y 55 GHz. Tenemos 59 máquinas virtuales con un total de 79 vCPU asignadas. Según las estadísticas de vSphere, en los últimos 6 meses, hemos promediado un poco más de 14 GHz utilizados (mínimo 9 GHz, máximo 25 GHz), y durante ese tiempo hubo 0 Contención de conteo de núcleo de CPU.
Paul Gear
7

Para ampliar la redacción de ewwhite, a menos que tenga aplicaciones que puedan aprovechar explícitamente múltiples vCPU o múltiples núcleos por vCPU, no hay absolutamente ningún beneficio en la asignación de múltiples vCPU / núcleos a una VM. De hecho, la mayoría de las veces terminará con un rendimiento más bajo en lugar de ejecutarse en una sola vCPU que tiene un núcleo asignado, en parte debido a la sobrecarga de programación requerida para ejecutar múltiples vCPU.

FWIW, en una configuración de VDI, el número frecuentemente citado es de 5 vCPU por núcleo físico. Por supuesto, eso está teniendo en cuenta los escritorios de trabajo de oficina. Si sus máquinas virtuales están realmente ocupadas compilando código todo el tiempo, es posible que no pueda instalar 5 vCPU por núcleo físico.

La razón por la que tanta gente dice que "depende" es porque realmente lo hace. Observe los valores de CPU Ready y luego decida si puede poner más carga de CPU en un sistema en particular. CPU Ready es una medida de que la vCPU está lista para ejecutar un comando, pero tiene que esperar a que esté disponible el tiempo físico de la CPU.

En su caso, si está compilando programas grandes, es muy posible que sus máquinas virtuales realmente necesiten mucho tiempo de CPU. Como señaló ewwhite, normalmente la virtualización tiende a estar limitada por E / S de disco y RAM en lugar de estar limitada por la CPU.

Extractor de realidad
fuente
13
absolutely zero benefit in allocating multiple vCPUs/cores to a VM- No del todo correcto. Tenemos una aplicación de subproceso único que solía colgarse semanalmente. Cuando una sola vCPU estaba al 100%, era imposible acceder a ese sistema y tuvimos que restablecer el nivel de hipervisor de la VM. Agregamos una segunda vCPU y cuando la aplicación se bloqueó, pudimos ingresar fácilmente y eliminar el hilo ofensivo. Esto es cierto, pero nunca se puede tratar en términos absolutos.
Mark Henderson
44
Lo que Mark escribió es la razón por la que usamos dos núcleos como límite inferior para cada VM, sin importar si la necesitan o no.
Nils
2
El valor listo es la mejor manera de saber si está sobreaprovisionando su host, su valor listo debe ser lo más bajo posible. Es el% de tiempo que una VM está "lista" para usar un ciclo de CPU, pero tiene que esperar mientras la CPU está ocupada con otra tarea. Para explicar por qué darle a su vm muchos núcleos puede tener un impacto en el rendimiento, usaré un ejemplo simple: si tengo 4 núcleos físicos y 4vms, si tiene 3 máquinas virtuales con 2 núcleos y una vm con 4 núcleos, sus máquinas virtuales más pequeñas obtendrán realmente más ciclos, ya que pueden "encajar" mejor en múltiplos. ¡Vaya lo más conservador posible con usted vcpus!
Rqomey
@ MarkHenderson Puedo ver cómo eso podría ser beneficioso, y algo así podría sucederle al tipo que hizo la pregunta ya que trabaja con compiladores.
Extractor de realidad
@Nils Creo que darles a cada VM 2 núcleos si hay una necesidad comercial o no es una muy mala idea. Podría fácilmente afectarlo negativamente de muchas maneras, tamaño de ranura, falta de núcleos disponibles para reiniciar / conmutar por error, pérdida de rendimiento debido a lo que escribió Rqomey, simplemente innumerables otras cosas. Casi siempre puede acceder a su VM a través de vCenter y DCUI.
Extractor de realidad
3

El problema subyacente es básicamente el mismo que con la programación de procesos en un sistema físico. Siempre que la carga del sistema esté por debajo del número de núcleos (o incluso procesadores lógicos, en el caso de HyperThreading), todo está bien y los procesadores pueden manejar la carga.

Por lo tanto, siempre que la carga concurrente en todas las vCPU usadas no exceda la carga que pueden manejar sus núcleos físicos, todo está bien.

Para sus demandas, solo compilar es un trabajo intensivo de CPU, que solo es necesario de vez en cuando. Para las máquinas virtuales compiladoras asignamos tantas CPU como estén disponibles. Entonces, si es necesario compilar, se realizará lo más rápido posible (si su compilador admite la compilación paralela).

Esto podría no ser cierto para un VM compilador que se encuentra bajo carga constante (por ejemplo, si proporciona un servicio de Internet para hacer compilaciones y se usa constantemente).

Nils
fuente
2

Una regla general que he visto (posiblemente en la documentación de VMware) es no asignar más núcleos a una VM que los físicamente existentes en el host, porque eso haría que se emularan múltiples vCores en un solo núcleo, agregando una sobrecarga innecesaria.

Paul Gear
fuente
1
¿Qué pasa con el reverso? ¿Qué sucede si tengo un Xeon de 6 núcleos y solo asigno 4 núcleos en la VM? ¿Cuál sería el rendimiento entonces? ¿El sistema VM podrá cosechar energía de los 6 núcleos físicos o se limitará a 4?
Overmind
Si solo le das 4 núcleos, solo tendrá acceso a 4 núcleos a la vez. Pero entiendo (no confirmado) es que esos 4 núcleos virtuales podrían asignarse a 4 de los 6 núcleos físicos, a menos que haya configurado la fijación.
Paul Gear