2011-04-12 8 views
9

Si uso la caja virtual de Oracle y asigno más de un núcleo virtual a la máquina virtual, ¿cómo se asignan los núcleos reales? ¿Utiliza ambos núcleos reales en la máquina virtual, o utiliza algo que emula núcleos?en la caja virtual, ¿qué ocurre cuando asigna más de un núcleo virtual?

+0

Tu pregunta es interesante. Uso VBox 4.0.4 en el procesador AMD x86_64, he activado dos núcleos virtuales para la instancia de VM (Linux Red hat 64bit) pero solo se activa un núcleo virtual, a partir de la documentación "VirtualBox puede presentar hasta 32 CPU virtuales en cada máquina virtual ". Seguiré esta pregunta. –

Respuesta

10

Su pregunta es casi como preguntar: ¿Cómo determina un sistema operativo qué núcleo ejecutar un proceso/subproceso determinado? Su computadora está tomando ese tipo de decisión todo el tiempo: tiene más procesos/subprocesos en ejecución que los núcleos disponibles. Esta respuesta específica es similar en naturaleza pero también depende de cómo esté configurada la máquina invitada y de la compatibilidad que tenga su hardware para acelerar el proceso de virtualización, por lo que esta respuesta definitivamente no es definitiva y no abordaré realmente cómo el programa programa el código para ser ejecutado, pero permite examinar dos casos relativamente simples:

La primera sería una máquina totalmente virtualizada: esta sería una máquina con aceleración mínima o no activada. El hardware presentado al invitado está completamente virtualizado, aunque muchas instrucciones de la CPU simplemente se pasan y se ejecutan directamente en la CPU. En casos como este, la VM invitada se comporta más o menos como cualquier proceso que se ejecute en el host: los recursos de la CPU están programados por el sistema operativo (para ser claro, el host en este caso) y los procesos/subprocesos se pueden ejecutar en los núcleos a los que están autorizados. El valor predeterminado suele ser cualquier núcleo que esté disponible, aunque pueden existir algunas optimizaciones para intentar mantener un proceso en el mismo núcleo para permitir que los cachés L1/L2 sean más efectivos y minimizar los cambios de contexto. Normalmente, en estos casos solo tendría una CPU asignada al sistema operativo invitado, y eso se traduciría en un solo proceso en el host.

En un escenario un poco más complejo, una máquina virtual se configura con todas las opciones de aceleración de virtualización de CPU disponibles. En Intel hablar, estos se conocen como VT-x para AMD, es AMD-V. Estos soportan principalmente instrucciones privilegiadas que normalmente requerirían alguna traducción/captura binaria para mantener al anfitrión y al invitado protegidos. Como tal, el sistema operativo host pierde un poco de visibilidad. Incluya en ese soporte de MMU acelerado por hardware (de modo que se pueda acceder directamente a las tablas de páginas de memoria sin que el software de virtualización lo oculte), y la visibilidad disminuirá un poco más. A fin de cuentas, aún se comporta en gran medida como el primer ejemplo: se trata de un proceso que se ejecuta en el host y está programado en consecuencia, solo que puede pensar en un hilo asignado para ejecutar las instrucciones (o pasarlas) para cada CPU virtual.

Vale la pena señalar que mientras que usted puede (con el soporte de hardware correcto) asignar más núcleos virtuales a los invitados que los que tiene disponibles, no es una buena idea. Normalmente, esto tendrá como resultado una disminución del rendimiento ya que el huésped potencialmente agita la CPU y no puede programar correctamente los recursos que se solicitan, incluso si la CPU no está gravada en su totalidad. Lo menciono como un escenario que comparte ciertas similitudes con un programa de subprocesos múltiples que engendra muchos más hilos (que en realidad están ocupados) que núcleos de CPU inactivos disponibles para ejecutarlos. Normalmente, su rendimiento será peor que si hubiera utilizado menos hilos para realizar el trabajo.

En el caso extremo, VirtualBox incluso admite hot-plugging CPU recursos, aunque solo unos pocos sistemas operativos lo soportan correctamente: Windows 2008 Data Center edition y ciertos kernels de Linux. Las mismas reglas generalmente se aplican cuando un núcleo de CPU invitado se trata como un proceso/subproceso en un núcleo lógico para el host, sin embargo, depende realmente del host y del hardware decidir qué núcleo lógico se usará para el núcleo virtual.

Con todo esto dicho - su pregunta de cómo VirtualBox realidad asigna esos recursos ... bueno, no he cavado a través del código, así que ciertamente no puede responder definitivamente pero ha sido mi experiencia que generalmente se comporta como se describe.Si es realmente curioso, puede experimentar con el etiquetado de VirtualBox VBoxSvc.exe y los procesos asociados en el Administrador de tareas y elegir la opción "Establecer afinidad" y limitar su ejecución a una sola CPU y ver si se respetan esas configuraciones. Probablemente dependa del nivel de asistencia de HW que tenga disponible si el host respeta esas configuraciones, ya que probablemente el invitado no se esté ejecutando realmente como parte de ellas.

Cuestiones relacionadas