¿Existe una configuración óptima para la cantidad de núcleos de CPU expuestos a una VM?

23

VirtualBox, y posiblemente otro software de VM, permite al usuario especificar la cantidad de CPU expuestas a la VM. En mi caso particular, tengo una CPU de doble núcleo, con Windows 7 de 64 bits ejecutándose de forma nativa, y Ubuntu 9.04 de 64 bits como VM.

El archivo de ayuda sugiere no establecer esto por encima del número de núcleos físicos disponibles. Esto tiene sentido. Entonces, ¿es mejor asignar 1 o 2 núcleos de CPU? ¿Depende esto completamente de la carga de CPU nativa?

sblair
fuente

Respuestas:

6

Depende completamente de lo que esté haciendo el SO huésped. En mi experiencia personal, una VM está ejecutando un solo programa (servidor de compilación, servidor de trac, SVN, etc.), por lo que no hay razón para establecerlo por encima de uno.

Un posible caso puede ser si es un usuario final, por ejemplo, una universidad que está utilizando el sistema operativo invitado como un desecho (es decir, TA) y luego puede establecerlo en más de uno.

Nate
fuente
En otras palabras: para un sistema temporal, también puede maximizar la cuota de núcleo de la CPU; pero para un uso "normal" o típico, configúrelo en un núcleo (para no interferir demasiado con el rendimiento del sistema operativo host).
sblair
18

La información en esta respuesta ya no es correcta . Fue correcto en los días de estricta programación conjunta, pero ya no es el caso.

Mantengo la respuesta a continuación por razones de prosperidad, pero no confíe en que sea precisa para los hipervisores modernos.


Usted debe no asignar todos sus núcleos como vCPU en una máquina virtual.

Si una máquina virtual solicita ningún tiempo de CPU, VMware tiene asignar ya sea toda la CPU virtuales, o ninguno de la CPU virtuales.

Lo que esto significa es que, en un sistema de 4 núcleos, si asigna los 4 núcleos, solo al host o al invitado se le puede asignar tiempo de procesador, no ambos al mismo tiempo.

Esto arruinará absolutamente el rendimiento en ambos entornos.

Siéntase libre de asignar un número impar de núcleos (por ejemplo, 3). Se siente extraño, pero es una opción totalmente legítima.

En general, nunca asigno más de (n / 2) vCPU (en su caso, 2), pero normalmente estoy asignando núcleos en servidores con entre 12 y 32 núcleos donde puede asignar grandes cantidades de vCPU sin un gran impacto.

Mark Henderson
fuente
Esta es la única respuesta hasta ahora escrita con algún grado de autoridad. Gracias por compartir tus experiencias.
G-Wiz
55
-1: No es consistente con mi experiencia. La VM es un proceso cuyo tiempo de CPU se puede programar de la misma manera que cualquier otro proceso en el host. Puede ajustar la prioridad de los procesos de VM en el host y el sistema equilibrará las cargas adecuadamente.
bwDraco
2
( continuación ) Digamos que tiene un servidor de 16 núcleos. Una configuración de ejemplo sería 4 máquinas virtuales, cada una configurada para 8 núcleos. Si bien esto puede parecer demasiados núcleos virtuales, permite que las máquinas virtuales individuales escalen mejor en cargas de trabajo más pesadas. Si la utilización combinada excede el número de núcleos físicos, el host equilibrará las cargas en consecuencia. Así es como la virtualización puede aumentar el rendimiento y reducir los costos, aprovechando al máximo el hardware del host.
bwDraco
@DragonLord: esta respuesta tiene más de 2 años en una pregunta que tiene casi 4 años y podría estar basada en información desactualizada. Me refiero a la "estricta programación conjunta" de ESX, pero no recuerdo la antigüedad de esa información, y no me he mantenido al tanto de cómo ha cambiado la programación de la CPU en los últimos años.
Mark Henderson
1
Solo quería dejar una nota aquí que, tanto en Ubuntu 14.04 como en 16.04, hay problemas de arranque y fallas si configura el número de CPU en un número impar. No he podido entender por qué porque simplemente decidí mantenerlo en números pares para evitar los problemas.
Dorian
3

La cantidad de núcleos expuestos a las CPU invitadas no afecta el rendimiento tanto como usted quisiera. Simplemente ajusta la cantidad de núcleos que la CPU invitada "ve".

Dependiendo de cómo esté configurado el emulador, podría literalmente reducir a la mitad el rendimiento de la máquina virtual, no hacer nada o solo afectar la forma en que el sistema operativo / aplicaciones invitados dividen su programación de subprocesos.

Es mejor dejarlo por defecto. Si encuentra problemas de rendimiento en la PC host, simplemente puede ajustar la prioridad del proceso con el Administrador de tareas de Windows.

Penetración
fuente
3

Como mencionó Nate, siempre y cuando su VM sirva principalmente para ejecutar un proceso de subproceso único, hay pocas razones para asignar más de un núcleo.

Sin embargo, si planea usarlo de una manera que pueda beneficiarse de más núcleos (programa multiproceso, muchos programas paralelos, ...), la historia es más complicada. Anteriormente supuse que usar la mitad de sus CPU para su VM era una buena idea. Resulta que esto no siempre es óptimo.

La única forma de asegurarme es ejecutar puntos de referencia ... No sé por qué, pero en mi sistema Core2 Quad (que tiene soporte VT-x, paginación anidada, ...), usar 1 de los 4 núcleos funciona mejor que usar 2 o más núcleos! Veo esto simplemente en los tiempos de inicio de la VM, pero también durante los puntos de referencia de compilación.

Con otros resultados de hardware son diferentes. También tengo un i7 con 8 núcleos, y el rendimiento parece escalar mucho mejor con la cantidad de núcleos allí (usando 4 allí felizmente).

Mi consejo: compara primero un nuevo hardware.

Arnout
fuente
1

Confiaría en el planificador del sistema operativo y solo establecería la VM en el número de núcleos físicos, a menos que sepa que siempre desea que el host tenga un núcleo potencialmente inactivo mientras está ocupado en la VM.

Andrew Coleson
fuente
1

Esto depende de lo que desee hacer en la máquina virtual, así como en la máquina física. Si necesita usar la máquina virtual mientras se usa el sistema operativo host para alguna otra actividad, puede ser mejor usar dos núcleos de procesador para la VM para que el host tenga dos restantes si la VM está bajo carga completa. Por otro lado, si está trabajando principalmente en la VM, puede usar todos los núcleos de procesador.

Sin embargo, a menos que se espere que el invitado use los cuatro núcleos a la vez, puede usarlos con seguridad mientras continúa trabajando en el sistema operativo host. Recuerde que siempre puede ajustar la prioridad del proceso de VM mientras se ejecuta en el sistema operativo host, y el sistema equilibrará las cargas en consecuencia.

bwDraco
fuente
Esto se basa en mi experiencia con VirtualBox. Como no estoy familiarizado con los productos VMware, puedo estar equivocado; Si es así, eliminaré esta respuesta.
bwDraco
0

Sí, también diría que depende. Pero diré lo que prefiero hacer. En el trabajo tengo una CPU de cuatro núcleos. Entonces, para mi imagen virtual (win7), he asignado dos CPU. De esa manera, puedo usar tanto la máquina host como la máquina virtual al mismo tiempo, y cada una tiene los mismos recursos de CPU.

Joel Martinez
fuente