He estado ejecutando varias máquinas virtuales con VirtualBox, y el uso de memoria reportado desde varias perspectivas, y tengo problemas para calcular cuánta memoria usan realmente mis máquinas virtuales. Aquí hay un ejemplo:
- Tengo una VM que ejecuta Windows 7 (como SO invitado) en mi máquina Windows XP Host.
- La máquina host tiene 3 GB de RAM
- El Guest VM está configurado para tener una memoria base de 1 GB
- Si ejecuto el Administrador de tareas en el sistema operativo invitado, veo un uso de memoria de 430 MB
- Si ejecuto el Administrador de tareas en el sistema operativo host, veo 3 procesos que parecen pertenecer a VirtualBox:
- VirtualBox.exe (1), con 60 MB de memoria (parece que este tiene el mayor uso de CPU)
- VirtualBox.exe (2), usando 20 MB de memoria
- VBoxSvc.exe, usando 11.5 MB de memoria
- Mientras se ejecuta la VM, el uso de memoria del sistema operativo host es de aproximadamente 2 GB
- Cuando apago la máquina virtual, el sistema operativo host vuelve al uso de memoria y se reduce a unos 900 MB
Claramente, hay algunas grandes diferencias aquí. Realmente no entiendo cómo GuestOS puede usar más de 400 MB, mientras que el sistema operativo host solo muestra unos 75 MB asignados a la VM. ¿Hay otros procesos utilizados por VirtualBox que no son tan obviamente nombrados?
Además, me gustaría saber si ejecuto una máquina con 1 GB, ¿eso va a quitar 1 GB de mi sistema operativo host, o solo la cantidad de memoria que la máquina Invitada está usando actualmente?
Actualizar:
Alguien expresó desconfianza sobre mis números de uso de memoria, y no estoy seguro de si esa desconfianza se dirigió a mí o a los informes del Administrador de tareas de mi sistema operativo host (que quizás sea el culpable), pero para cualquier escéptico, aquí hay una captura de pantalla de esos procesos en la máquina host:
fuente
Respuestas:
El único lugar en el Administrador de tareas que parece reflejar el monto total es en la pestaña de rendimiento: el valor del Cargo de compromiso total sigue aproximadamente el ritmo del monto asignado a la VM. Acabo de cerrar uno con 1536MB asignados, y el cargo de compromiso bajó de aproximadamente 2.4GB a 0.8GB. Puede monitorear hasta cierto punto esto en Virtual Box usando el Monitor de rendimiento y eligiendo el Proceso: Contadores de bytes privados para VirtualBox, VBoxSvc y también VirtualBox # 1, # 2, etc. (uno para cada VM en ejecución). También está el contador Memoria: Bytes comprometidos para todo.
fuente
Para comprender la arquitectura de proceso de VirtualBox, consulte
La arquitectura de VirtualBox :
En cuanto a la memoria, el Manual del usuario establece:
Esto significa que el invitado saca del host:
Siempre es posible que el manual de VirtualBox tenga varias versiones atrás y que la última técnica de optimización de memoria no esté documentada.
Además, VirtualBox puede estar optimizando el uso de la memoria al no asignar toda la memoria VM definida.
Asignar memoria según sea necesario es una optimización que puede ahorrar mucho en memoria física, pero los procesos intensivos en memoria en la VM pueden ralentizarse debido a la necesidad frecuente de VirtualBox de solicitar más memoria de host.
fuente
Esto parece ser un problema de Windows. Vea la tercera publicación aquí: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html
El uso de un programa como VMMap definitivamente muestra que la memoria que le dice a VBox que use realmente se está usando. No tengo idea de por qué no es visible para el administrador de tareas o el explorador de procesos.
fuente
Esas entradas que ve en TaskManager no son para su máquina virtual, son para la GUI de VirtualBox. La pestaña de rendimiento le mostrará claramente la cantidad de memoria total que está utilizando, pero sin granularidad con respecto a los procesos. Personalmente, me gustaría ver que VBox use solo lo que necesita, pero estoy de acuerdo en que es importante que pueda usar todo lo que espera, de ahí la protección del anillo.
fuente
Podría estar relacionado con las adiciones de VirtualBox Guest.
Mi instalación de Ubuntu está usando ~ 20MB según lo informado por WinXP. Esto es con VBoxAdditions.
Mi instalación de Lubuntu actualmente está usando ~ 90MB según lo informado por WinXP. Acabo de instalarlo; VBoxAdditions no se han instalado.
El uso de la memoria varía según lo que esté haciendo la VM. Tengo mi instalación de Ubuntu ejecutando ziproxy; cuando hago algo que habla de ziproxy, el uso de memoria aumenta unos pocos megabytes a medida que la VM entra en uso.
Sin embargo, en general, la virtualización ha avanzado lo suficiente como para que las especificaciones aparentes para el huésped no tengan que asignarse completamente desde el host. Parece utilizar una asignación dinámica y una fuerte paginación.
fuente
Estás viendo lo que se está utilizando en el host, no lo que se está asignando . El invitado no está utilizando más de 400 MB de RAM del host (todavía).
Reservará 1 GB de RAM, sin embargo, puede terminar usando realmente mucho menos que eso. Si el invitado no usa parte de esa memoria, la RAM del host se puede usar para muchos otros fines (como el almacenamiento en caché de páginas de disco limpias), aunque esté reservada para el invitado. E incluso si el invitado usa parte de esa memoria, si no accede a ella durante el tiempo suficiente, aún puede ser expulsada de la memoria física a través del intercambio oportunista.
Desafortunadamente, te has metido en un problema extremadamente complejo y tomaría muchas páginas explicarlo realmente. Hay mucha información incorrecta en las respuestas a esta pregunta.
fuente
Puede verlo usando la gran aplicación VMMap de SysInternals :
VBoxSVC.exe
, debe tener varios procesos secundariosVBoxHeadless.exe
si se está ejecutando una VMVBoxHeadless.exe
procesos, seleccione la rama correcta comprobando la línea de comando del proceso, contiene un identificador de su máquina virtualVBoxHeadless.exe
en la rama (es decir, no tiene más hijos, solo un padre, por lo que es una hoja), recuerda su PIDVBoxHeadless.exe
proceso correcto por su PID y haga clic en AceptarEn mi caso, todos informaron bytes privados , conjunto de trabajo y comprometida memoria VMMap casi coincidir exactamente con la cantidad de memoria asignada a la máquina virtual en VirtualBox.
fuente