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?
Respuesta
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.
- 1. emulación android en caja virtual en eclipse
- 2. ¿De todos modos para ejecutar Kinect en la caja virtual?
- 3. ¿Qué significa cuando "virtual" está en "clase Foo: barra virtual pública" en lugar de "virtual void frob()"?
- 4. ¿Debería escribir "público virtual" o "público virtual" en herencia virtual?
- 5. cómo crear instantáneas automáticas para la caja virtual Oracle?
- 6. Destructor virtual: ¿es necesario cuando no se asigna dinámicamente la memoria?
- 7. ¿Qué ocurre exactamente cuando asigna una referencia a un elemento en Array en Java?
- 8. ¿Memoria virtual?
- 9. ¿Admite Android la memoria virtual
- 10. ¿Qué ocurre cuando se asigna una nueva estructura a la matriz en C#?
- 11. C++, base virtual abstracta protegida virtual virtual privado destructor
- 12. VA (Dirección virtual) & RVA (Dirección virtual relativa)
- 13. función virtual declarada no virtual en una clase derivada
- 14. Javascript en Directorio virtual conscientes de directorio virtual
- 15. Java Virtual Machine Internals
- 16. ¿Por qué necesitamos mesa virtual?
- 17. Comprensión de dirección virtual y espacio de dirección virtual
- 18. Dispositivo serie virtual en Python?
- 19. ¿Para qué sirve la invocación de un método virtual Java?
- 20. Dominio en la herencia virtual
- 21. Orden de constructor en la herencia virtual
- 22. ¿Cómo se diferencia la sobrecarga de un método virtual de un método no virtual?
- 23. Delphi: Capacidad de mantenimiento virtual vs virtual Resumen
- 24. ¿Por qué se requiere un vptr cuando la clase derivada no anula la función virtual?
- 25. ¿Qué significa ejecutar un SO virtual en "modo sin cabeza"?
- 26. Memoria virtual
- 27. ¿Qué significa la palabra clave virtual al anular un método?
- 28. ¿Métodos de extensión virtual?
- 29. Llamada de función virtual pura
- 30. virtual inheritance
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. –