Los núcleos "virtuales" que asigna a una VM están disponibles para usar en el procesamiento múltiple dentro del sistema operativo del cliente. Si asigna solo un núcleo a una VM, entonces el SO huésped no tiene posibilidad de distribuir la carga en múltiples núcleos. Así que supongamos algunos escenarios prácticos:
Host con 4 CPU, invitado asignado 1 CPU
- Máquina host que ejecuta 4 núcleos físicos
- El SO cliente dentro de la VM asignó 1 núcleo
En este caso, el SO huésped podrá usar solo un núcleo. Por lo tanto, si ejecuta una aplicación multiproceso que escala bien en múltiples núcleos, seguirá ejecutándose solo en un núcleo. Por lo tanto, todos los subprocesos en el sistema operativo invitado deben compartir un núcleo físico.
Ejecutar un SO huésped en esta configuración que carga completamente la CPU producirá una carga de CPU del SO host de ~ 25% (uno de cada 4 núcleos cargados en el host).
Por supuesto, aún puede ejecutar tareas que consumen CPU en su sistema operativo host y hacer uso de los 3 núcleos restantes.
Host con 4 CPU, invitado asignado 4 CPU
- Máquina host que ejecuta 4 núcleos físicos
- El SO cliente dentro de la VM asignó 4 núcleos
En este caso, puede ejecutar aplicaciones multiproceso bien escalables dentro de la máquina virtual invitada que puede hacer uso completo de las 4 CPU virtuales. VirtualBox usará 4 núcleos físicos para procesar tareas programadas dentro de la VM y, por lo tanto, la carga de su CPU host podría alcanzar un máximo de 100% de uso.
Entonces, ¿qué configuración debe elegir?
La respuesta a esta pregunta depende más o menos de lo que le gustaría hacer. En algunos casos, puede ser útil asignar todos los núcleos a una máquina virtual o incluso ejecutar varias máquinas virtuales que tengan asignada a cada uno la cantidad total de CPU. En tales casos, una VM puede hacer un uso completo de toda la potencia de procesamiento del host. Si se asignan más CPU a las máquinas virtuales que las físicamente presentes, entonces las máquinas virtuales se verán afectadas por la carga en diferentes máquinas virtuales. Para evitar esto, puede dedicar algunos núcleos a máquinas virtuales específicas. Por ejemplo, ejecutar 2 máquinas virtuales con 2 CPU asignadas cada una en un nodo de 4 núcleos podría ayudar a que cada máquina virtual obtenga 2 CPU dedicadas (suponiendo que el sistema operativo host no imponga una carga que también tome parte de la potencia de procesamiento).
¿Tiene un impacto negativo en mi host asignar todos los núcleos a una VM?
De nuevo, esto depende de la ejecución del software. Si ejecuta una máquina virtual que está inactiva (no se ejecutan programas intensivos en CPU), la carga impuesta por esta máquina virtual será cercana al 0%. Incluso puede ejecutar 10 máquinas virtuales en paralelo y seguir experimentando una carga de CPU host cercana al 0% si todas las máquinas virtuales están inactivas.
¿Cómo se comporta la CPU con carga desigual?
Bueno, la distribución de carga de la CPU depende en gran medida de un componente incorporado específico del sistema operativo llamado planificador. Para Windows XP, el planificador intentó cargar todos los núcleos de la CPU. Por lo tanto, ejecutar una tarea de subproceso único con carga completa en una CPU de cuatro núcleos habría producido ~ 25% de carga en cada núcleo.
Desafortunadamente, esto ha demostrado ser malo para la administración moderna de energía de la CPU. Para los sistemas modernos, incluso es una ventaja si un solo núcleo se carga hasta el 100% antes de que el segundo núcleo se involucre. La razón es que mientras no haya suficiente carga para usar completamente un núcleo, los otros núcleos pueden permanecer en modo de reposo profundo para ahorrar energía y reducir la disipación de calor.
Para algunas CPU como Intel Core i-Series y las nuevas AMD (Bulldozer), esto es aún más interesante ya que en caso de que solo se use un subconjunto de los núcleos, los que no se usan se apagan. Esto reduce el consumo de energía de la CPU. Ambos (Intel y AMD) comienzan a usar el presupuesto de consumo térmico y de energía para luego overclockear los núcleos que están activos. Por lo tanto, esto puede dar un impulso a las aplicaciones de un solo subproceso (que no se pueden distribuir a múltiples núcleos para trabajar en una tarea en paralelo). Sin embargo, cuando todos los núcleos están activos, la mayoría de estas tecnologías de "impulso" solo tienen un pequeño efecto en la potencia de procesamiento, ya que la situación de "todos los núcleos activos" es exactamente la situación para la que fue diseñada la CPU.
Entonces, la respuesta es que su core i7 maneja muy bien la carga desigual en núcleos individuales e incluso podría proporcionar un aumento de rendimiento para aplicaciones de un solo subproceso. Sin embargo, este aumento está dentro del rango de un pequeño porcentaje, mientras que las aplicaciones de subprocesos múltiples que pueden distribuir la carga a través de múltiples núcleos de CPU pueden ser impulsadas por factores (x2 en doble núcleo, 4x en cuatro núcleos ...) en el caso óptimo . Por lo tanto, el subprocesamiento múltiple siempre proporciona más potencia en términos de potencia combinada de la CPU que el subprocesamiento único combinado con el impulso del reloj.
No he profundizado en los manuales en el sitio de VB, pero supongo que la asignación de núcleos a una máquina invitada permitiría que el sistema operativo invitado vea múltiples núcleos y, por lo tanto, permita que las aplicaciones puedan aprovechar esos núcleos adicionales, la velocidad adicional / potencia / eficiencia, igual que lo haría para el sistema operativo host.
fuente