Come funziona l'utilizzo della memoria di VirtualBox?


38

Ho eseguito diverse macchine virtuali con VirtualBox e l'utilizzo della memoria è stato riportato da varie prospettive e non riesco a capire quanta memoria effettivamente utilizzano le mie macchine virtuali. Ecco un esempio:

  • Ho una macchina virtuale che esegue Windows 7 (come sistema operativo guest) sul mio computer host Windows XP.
  • La macchina host ha 3 GB di RAM
  • La VM guest è configurata per avere una memoria di base di 1 GB
  • Se eseguo Task Manger sul SO guest, vedo un utilizzo della memoria di 430 MB
  • Se eseguo Task Manger sul sistema operativo host, vedo 3 processi che sembrano appartenere a VirtualBox:
    1. VirtualBox.exe (1), utilizzando 60 MB di memoria (questo sembra avere il maggior utilizzo di CPU)
    2. VirtualBox.exe (2), utilizzando 20 MB di memoria
    3. VBoxSvc.exe, utilizzando 11,5 MB di memoria
  • Durante l'esecuzione della VM, l'utilizzo della memoria del sistema operativo host è di circa 2 GB
  • Quando spengo la VM, il sistema operativo host torna all'utilizzo della memoria fino a circa 900 MB

Quindi, chiaramente, ci sono alcune enormi differenze qui. Non capisco davvero come GuestOS possa utilizzare oltre 400 MB, mentre il sistema operativo host mostra solo circa 75 MB allocati alla VM. Esistono altri processi utilizzati da VirtualBox che non sono così ovviamente chiamati?

Inoltre, mi piacerebbe sapere se eseguo un computer con 1 GB, questo porterà a 1 GB di distanza dal mio sistema operativo host o solo la quantità di memoria attualmente utilizzata dal computer Guest?

Aggiornare:

Qualcuno ha espresso sfiducia nei confronti dei miei numeri di utilizzo della memoria, e non sono sicuro se quella sfiducia fosse rivolta a me, o al rapporto del Task Manager del mio sistema operativo host (che forse è il colpevole), ma per tutti gli scettici, ecco uno screenshot di quei processi sul computer host:

Task Manager VirtualBox


Oggi mi chiedevo esattamente la stessa cosa quando eseguivo due VM VBox contemporaneamente.
MartW,

In Task manager, attiva alcune delle altre colonne di memoria (Visualizza-> Seleziona colonne ...). La memoria viene conteggiata in molti modi diversi in Windows. Ad esempio, "dimensione del commit" può essere notevolmente superiore a "Utilizzo della memoria". Quale esattamente usare e come interpretarli è una storia diversa.
lilbyrdie,

Possibile duplicato: superuser.com/q/17266/302
Rowland Shaw

Risposte:


12

L'unica posizione in Task Manager che sembra riflettere l'intero importo si trova nella scheda Prestazioni: il valore della Commissione di impegno totale si adegua all'incirca all'importo assegnato alla VM. Ne ho appena chiuso uno con 1536 MB allocati e il costo di commit è passato da circa 2,4 GB a 0,8 GB. È possibile monitorare in una certa misura questo contro Virtual Box utilizzando Performance Monitor e scegliendo il processo: contatori di byte privati ​​per VirtualBox, VBoxSvc e anche VirtualBox n. 1, n. 2, ecc. (Uno per ogni VM in esecuzione). C'è anche il contatore Memoria: Byte impegnati per tutto.


L'OP non sembra essere particolarmente interessato a ciò che è stato assegnato, ma sta chiedendo cosa viene utilizzato. Quindi non sono sicuro di come questo si collega alla sua domanda.
David Schwartz,

12

Per comprendere l'architettura di processo di VirtualBox, vedere
L'architettura di VirtualBox :

Una volta avviata una macchina virtuale (VM) dalla GUI, si hanno due finestre (la finestra principale e la VM), ma tre processi in esecuzione. Guardando il tuo sistema da Task Manager (su Windows) o alcuni monitor di sistema (su Linux), vedrai questi:

  1. VirtualBox, la GUI per la finestra principale;
  2. Un altro processo VirtualBox avviato con il parametro -startvm, il che significa che il suo processo GUI funge da shell per una macchina virtuale;
  3. VBoxSVC, il servizio di cui sopra, che è in esecuzione in background per tenere traccia di tutti i processi coinvolti. Questo è stato avviato automaticamente dal primo processo della GUI.

Per quanto riguarda la memoria, il Manuale dell'utente afferma:

Memoria di base

Ciò imposta la quantità di RAM allocata e assegnata alla VM quando è in esecuzione. La quantità di memoria specificata verrà richiesta dal sistema operativo host, quindi deve essere disponibile o resa disponibile come memoria libera sull'host quando si tenta di avviare la VM e non sarà disponibile per l'host mentre la VM è in esecuzione. Questa è la stessa impostazione specificata nella procedura guidata "Nuova macchina virtuale", come descritto con le linee guida nella sezione chiamata "Creazione di una macchina virtuale" sopra.

Ciò significa che l'ospite estrae l'host:

  • Tutta la memoria con cui è stata dichiarata
  • Ogni VM è anche un eseguibile di VirtualBox, quindi è necessario aggiungere la sua memoria.

È sempre possibile che il manuale di VirtualBox abbia diverse versioni precedenti e che l'ultima tecnica di ottimizzazione della memoria non sia documentata.

Inoltre, VirtualBox potrebbe ottimizzare l'utilizzo della memoria non allocando l'intera memoria VM definita.

Allocare memoria come richiesto è un'ottimizzazione che può risparmiare molto sulla memoria fisica, ma i processi ad alta intensità di memoria nella VM possono essere rallentati dalla frequente necessità di VirtualBox di richiedere più memoria host.


8
Non è specifico di VirtualBox - vedi questo: serverfault.com/questions/19935/…
MartW,

@harrymc, quindi quello che stai dicendo è che il task manager NON mostra nella lista dei processi quanta memoria utilizza la virtual box?
Trevor Boyd Smith,

@TrevorBoydSmith: Tutto quello che sto dicendo è che è coinvolto più di un processo e di scegliere correttamente le colonne in Task Manager.
harrymc,

2
la mia VM occupa 1,2 GB. sul task manager mostra solo 60 MB. quindi quindi direi che il Task Manager non mostra tutta la memoria che la mia VM sta usando. a meno che tu non riesca in qualche modo a mostrarmi come modificare Task Manager per mostrare 1.2 gb.
Trevor Boyd Smith,

1
Tutta questa conversazione e tutte le risposte sono solo variazioni di una confusione tra memoria virtuale e memoria fisica.
David Schwartz,


2

Le voci che vedi in TaskManager non sono per la tua macchina virtuale, ma per la GUI di VirtualBox. La scheda delle prestazioni ti mostrerà chiaramente quanta parte della tua memoria totale viene utilizzata, ma senza granularità riguardo ai processi. Personalmente vorrei vedere VBox utilizzare solo ciò di cui ha bisogno, ma sono d'accordo che è importante che sia in grado di utilizzare tutto ciò che si aspetta, quindi la ring-scherma.


1

Potrebbe essere correlato alle aggiunte Guest di VirtualBox.

La mia installazione di Ubuntu attualmente sta usando ~ 20 MB come riportato da WinXP. Questo è con VBoxAdditions.

La mia installazione di Lubuntu sta attualmente usando ~ 90 MB come riportato da WinXP. L'ho appena installato; VBoxAdditions non è stato installato.

L'utilizzo della memoria varia in base a ciò che sta facendo la VM. Ho installato Ubuntu con ziproxy; quando faccio qualcosa che parla con ziproxy, l'utilizzo della memoria aumenta di alcuni megabyte quando la VM entra in uso.

In generale, tuttavia, la virtualizzazione è progredita abbastanza lontano da non dover assegnare interamente le specifiche all'ospite dall'host. Sembra usare l'allocazione dinamica e il paging forte.


1

Quindi, chiaramente, ci sono alcune enormi differenze qui. Non capisco davvero come GuestOS possa usare oltre 400 MB, mentre il sistema operativo host mostra solo circa 75 MB allocati alla VM. Esistono altri processi utilizzati da VirtualBox che non sono così ovviamente chiamati?

Stai guardando ciò che viene utilizzato sull'host, non ciò che viene allocato . Il guest non sta utilizzando (oltre) oltre 400 MB di RAM dell'host.

Inoltre, mi piacerebbe sapere se eseguo un computer con 1 GB, questo porterà a 1 GB di distanza dal mio sistema operativo host o solo la quantità di memoria attualmente utilizzata dal computer Guest?

Riserverà 1 GB di RAM, tuttavia potrebbe effettivamente esaurirsi notevolmente. Se il guest non utilizza parte di tale memoria, la RAM host può essere utilizzata per molti altri scopi (come la memorizzazione nella cache di pagine del disco pulite), anche se è riservata al guest. E anche se l'ospite utilizza parte di quella memoria, se non vi accede per un tempo sufficientemente lungo, può comunque essere espulso dalla memoria fisica attraverso lo scambio opportunistico.

Sfortunatamente, hai risolto un problema estremamente complesso e ci vorrebbero molte pagine per spiegarlo davvero. Ci sono molte informazioni errate nelle risposte a questa domanda.


0

Puoi vederlo usando la fantastica applicazione VMMap di SysInternals :

  1. Innanzitutto, devi trovare il processo giusto, quindi inizia ad esempio Process Hacker o Process Explorer di SysInternals
  2. Visualizza l'elenco dei processi come un albero
  3. Individua il processo VBoxSVC.exe, dovrebbe avere diversi processi figlio VBoxHeadless.exese una VM è in esecuzione
  4. Se sono in esecuzione più macchine virtuali, ci saranno più rami di VBoxHeadless.exeprocessi, selezionare il ramo giusto controllando la riga di comando del processo, contiene un identificatore della macchina virtuale
  5. Sei interessato al più basso VBoxHeadless.exenel ramo (cioè non ha più figli, solo un genitore, quindi è una foglia), ricorda il suo PID
  6. Avviare VMMap
  7. Seleziona il VBoxHeadless.exeprocesso giusto tramite il suo PID e fai clic su OK

Nel mio caso, tutto ha riferito byte privati , set di lavoro e Committed memoria VMMap quasi corrispondere esattamente la quantità di memoria assegnata alla macchina virtuale in VirtualBox.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.