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.
fuente
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.
fuente
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.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).
fuente
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.
fuente