¿Cómo funciona el uso de memoria de VirtualBox?

38

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:
    1. VirtualBox.exe (1), con 60 MB de memoria (parece que este tiene el mayor uso de CPU)
    2. VirtualBox.exe (2), usando 20 MB de memoria
    3. 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:

Administrador de tareas de VirtualBox

DrFredEdison
fuente
Me preguntaba exactamente lo mismo hoy cuando ejecuté dos máquinas virtuales VBox a la vez.
MartW
En el Administrador de tareas, active algunas de las otras columnas de memoria (Ver-> Seleccionar columnas ...). La memoria se cuenta de muchas maneras diferentes en Windows. Por ejemplo, el "tamaño de confirmación" puede ser dramáticamente más alto que el "Uso de memoria". Exactamente cuál usar y cómo interpretarlos es una historia diferente.
lilbyrdie
Posible duplicado: superuser.com/q/17266/302
Rowland Shaw

Respuestas:

12

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.

MartW
fuente
Sin embargo, el OP no parece estar particularmente interesado en lo que se ha asignado, pero está preguntando sobre lo que se está utilizando. Así que no estoy seguro de cómo se relaciona esto con su pregunta.
David Schwartz
12

Para comprender la arquitectura de proceso de VirtualBox, consulte
La arquitectura de VirtualBox :

Una vez que inicia una máquina virtual (VM) desde la GUI, tiene dos ventanas (la ventana principal y la VM), pero tres procesos en ejecución. Si observa su sistema desde el Administrador de tareas (en Windows) o algún monitor del sistema (en Linux), verá estos:

  1. VirtualBox, la GUI para la ventana principal;
  2. Otro proceso de VirtualBox que se inició con el parámetro -startvm, lo que significa que su proceso GUI actúa como un shell para una VM;
  3. VBoxSVC, el servicio mencionado anteriormente, que se ejecuta en segundo plano para realizar un seguimiento de todos los procesos involucrados. Esto fue iniciado automáticamente por el primer proceso GUI.

En cuanto a la memoria, el Manual del usuario establece:

Memoria base

Esto establece la cantidad de RAM que se asigna y se le da a la VM cuando se está ejecutando. La cantidad de memoria especificada se solicitará al sistema operativo del host, por lo que debe estar disponible o estar disponible como memoria libre en el host cuando intente iniciar la VM y no estará disponible para el host mientras la VM se esté ejecutando. Esta es la misma configuración que se especificó en el asistente "Nueva máquina virtual", como se describe con las pautas en la sección denominada "Creación de una máquina virtual" anterior.

Esto significa que el invitado saca del host:

  • Tanta memoria como se declaró con
  • Cada VM también es un ejecutable de VirtualBox, por lo que debe agregar su memoria.

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.

harrymc
fuente
8
No es específico de VirtualBox; consulte esto: serverfault.com/questions/19935/…
MartW el
@harrymc, entonces, ¿qué está diciendo es que el administrador de tareas NO muestra en la lista de procesos cuánta memoria está usando la caja virtual?
Trevor Boyd Smith
@TrevorBoydSmith: Todo lo que digo es que hay más de un proceso involucrado y elegir correctamente las columnas en el administrador de tareas.
harrymc
2
mi vm ocupa 1.2 GB. en el administrador de tareas solo muestra 60 MB. Por lo tanto, afirmaría que el administrador de tareas no muestra toda la memoria que está usando mi VM. a menos que pueda mostrarme de alguna manera cómo ajustar el administrador de tareas para mostrar 1.2gb.
Trevor Boyd Smith
1
Toda esta conversación y todas las respuestas son solo variaciones de una confusión entre la memoria virtual y la memoria física.
David Schwartz el
2

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.

Rob Vanstone
fuente
1

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.

mano amiga
fuente
1

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?

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).

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?

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.

David Schwartz
fuente
0

Puede verlo usando la gran aplicación VMMap de SysInternals :

  1. Primero, necesita encontrar el proceso correcto, así que comience, por ejemplo, Process Hacker o Process Explorer de SysInternals
  2. Mostrar la lista de procesos como un árbol
  3. Localice el proceso VBoxSVC.exe, debe tener varios procesos secundarios VBoxHeadless.exesi se está ejecutando una VM
  4. Si se están ejecutando varias máquinas virtuales, habrá varias ramas de VBoxHeadless.exeprocesos, seleccione la rama correcta comprobando la línea de comando del proceso, contiene un identificador de su máquina virtual
  5. Te interesa el más bajo VBoxHeadless.exeen la rama (es decir, no tiene más hijos, solo un padre, por lo que es una hoja), recuerda su PID
  6. Inicie VMMap
  7. Seleccione el VBoxHeadless.exeproceso correcto por su PID y haga clic en Aceptar

En 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.

Dawid Ferenczy Rogožan
fuente