it-swarm-eu.dev

Come funziona l'utilizzo della memoria di VirtualBox?

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

  • Ho un VM che esegue Windows 7 (come sistema operativo guest) sulla mia macchina windows XP Host.
  • La macchina host ha 3 GB di RAM
  • Il Guest VM è configurato per avere una memoria di base di 1 GB
  • Se eseguo Task Manager sul sistema operativo guest, vedo l'utilizzo della memoria di 430 MB
  • Se eseguo Task Manager 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 della 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 dell'Host torna all'uso della memoria scende a circa 900 MB

Quindi chiaramente, ci sono alcune enormi differenze qui. Davvero non capisco come GuestOS possa usare 400+ MB, mentre il SO Host mostra solo circa 75 MB allocati alla VM. Esistono altri processi utilizzati da VirtualBox che non sono così denominati?

Inoltre, mi piacerebbe sapere se eseguo una macchina con 1 GB, ci vorrà circa 1 GB di distanza dal mio sistema operativo host o solo la quantità di memoria attualmente utilizzata dalla macchina ospite?

Aggiornamento:

Qualcuno ha espresso sfiducia nei 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 host OS (che è forse il colpevole), ma per gli eventuali scettici, ecco uno screenshot di quei processi sulla macchina host:

VirtualBox task manager

37
DrFredEdison

Per capire l'architettura di processo di VirtualBox vedere
L'architettura VirtualBox :

Una volta che si avvia 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 qualche monitor di sistema (su Linux), vedrai questi:

  1. VirtualBox, la GUI per la finestra principale;
  2. Un altro processo VirtualBox che è stato avviato con il parametro -startvm, il che significa che il suo processo GUI agisce come Shell per una VM;
  3. VBoxSVC, il servizio sopra menzionato, 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 User Manual afferma:

Memoria di base

Questo imposta la quantità di RAM assegnata e data a 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 VM e non sarà disponibile per l'Host mentre VM è in esecuzione. Questa è la stessa impostazione che è stata specificata nella procedura guidata "Nuova macchina virtuale", come descritto con le linee guida sotto la sezione chiamata "Creazione di una macchina virtuale" sopra.

Ciò significa che l'ospite porta fuori dall'host:

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

È sempre possibile che il manuale di VirtualBox presenti diverse versioni e che le ultime tecniche di ottimizzazione della memoria non siano documentate.

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

L'allocazione della memoria, come richiesto, è un'ottimizzazione che può risparmiare molto sulla memoria fisica, ma i processi che richiedono molta memoria in VM possono essere rallentati dalla frequente necessità da parte di VirtualBox di richiedere più memoria host.

12
harrymc

L'unico posto in Task Manager che sembra riflettere l'intero importo è nella scheda delle prestazioni: il valore di Total Commit Charge rimane all'incirca con l'importo allocato alla VM. Ne ho appena chiuso uno con 1536 MB allocati e la commissione di commit è scesa da circa 2,4 GB a 0,8 GB. È possibile monitorare in parte questo contro Virtual Box utilizzando Performance Monitor e scegliendo Process: Contatori Byte privati ​​per VirtualBox, VBoxSvc e anche VirtualBox # 1, # 2, ecc. (Uno per ogni VM in esecuzione). C'è anche il contatore Memory: Committed Bytes per tutto.

12
MartW

Questo sembra essere un problema di Windows. Visualizza il terzo post qui: http://forum.sysinternals.com/pe-is-not-show-all-memory-used-by-virtualbox_topic23886.html

L'utilizzo di un programma come VMMap mostra sicuramente che la memoria che si dice VBox da utilizzare è in realtà in uso. Non ho idea del motivo per cui non è visibile al task manager o al processo Explorer.

4
RandomInsano

Quelle voci che vedi in TaskManager non sono per la tua macchina virtuale, sono per la GUI di VirtualBox. La scheda delle prestazioni mostra chiaramente quanta parte della memoria totale viene utilizzata, ma senza granularità per quanto riguarda i processi. Personalmente mi piacerebbe vedere VBox usare solo ciò di cui ha bisogno, ma sono d'accordo che è importante che sia in grado di usare quanto ci si aspetta, da qui il ring-fencing.

2
Rob Vanstone

Quindi chiaramente, ci sono alcune enormi differenze qui. Davvero non capisco come GuestOS possa usare 400+ MB, mentre il SO Host mostra solo circa 75 MB allocati alla VM. Esistono altri processi utilizzati da VirtualBox che non sono così denominati?

Stai guardando ciò che è usato sull'Host, non ciò che è allocato . Il guest non sta utilizzando più di 400+ MB dell'host RAM (ancora).

Inoltre, mi piacerebbe sapere se eseguo una macchina con 1 GB, ci vorrà circa 1 GB di distanza dal mio sistema operativo host o solo la quantità di memoria attualmente utilizzata dalla macchina ospite?

Si riserva 1 GB di RAM, tuttavia potrebbe effettivamente utilizzare meno di quello. Se il guest non usa parte di quella memoria, Host RAM può essere utilizzato per molti altri scopi (come la cache delle pagine del disco pulite), anche se è riservato al guest. E anche se l'ospite usa parte di quella memoria, se non la accede per un tempo sufficientemente lungo, può comunque essere espulsa dalla memoria fisica attraverso lo scambio opportunistico.

Sfortunatamente, sei entrato in un problema estremamente complesso e ci sarebbero volute molte pagine per spiegarlo veramente. Vi sono molte informazioni errate nelle risposte a questa domanda.

1
David Schwartz

Potrebbe essere correlato alle Addizioni Guest di VirtualBox.

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

La mia installazione di Lubuntu utilizza attualmente ~ 90 MB come riportato da WinXP. Appena installato; VBoxAdditions non è stato installato.

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

In generale, tuttavia, la virtualizzazione è avanzata abbastanza da non richiedere che le specifiche apparenti all'ospite siano interamente allocate dall'Host. Sembra utilizzare l'allocazione dinamica e il paging forte.

1
helping-hand