Jak działa wykorzystanie pamięci VirtualBox?

38

Korzystam z kilku maszyn wirtualnych z VirtualBox, a użycie pamięci jest zgłaszane z różnych perspektyw i mam problem z określeniem, ile pamięci faktycznie używają moje maszyny wirtualne. Oto przykład:

  • Mam maszynę wirtualną z systemem Windows 7 (jako system operacyjny gościa) na moim komputerze z systemem Windows XP.
  • Maszyna hosta ma 3 GB pamięci RAM
  • Gość VM jest skonfigurowany tak, aby mieć podstawową pamięć 1 GB
  • Jeśli uruchomię Menedżera zadań w systemie operacyjnym gościa, widzę użycie pamięci 430 MB
  • Jeśli uruchomię Menedżera zadań w systemie operacyjnym hosta, widzę 3 procesy, które wydają się należeć do VirtualBox:
    1. VirtualBox.exe (1), korzystający z 60 MB pamięci (ta wydaje się mieć największe użycie procesora)
    2. VirtualBox.exe (2), wykorzystujący 20 MB pamięci
    3. VBoxSvc.exe, wykorzystujący 11,5 MB pamięci
  • Podczas uruchamiania maszyny wirtualnej zużycie pamięci przez system operacyjny hosta wynosi około 2 GB
  • Kiedy wyłączam maszynę wirtualną, system operacyjny hosta wraca do użycia pamięci i spada do około 900 MB

Jasne jest, że istnieją tutaj ogromne różnice. Naprawdę nie rozumiem, w jaki sposób GuestOS może korzystać z ponad 400 MB, podczas gdy system operacyjny hosta pokazuje tylko około 75 MB przydzielonych do maszyny wirtualnej. Czy są jakieś inne procesy używane przez VirtualBox, które nie są tak wyraźnie nazwane?

Chciałbym również wiedzieć, czy jeśli uruchomię komputer o pojemności 1 GB, czy zabierze mi to 1 GB z mojego systemu operacyjnego, czy tylko tyle pamięci, ile aktualnie używa maszyna gościa?

Aktualizacja:

Ktoś wyraził nieufność do moich numerów wykorzystania pamięci i nie jestem pewien, czy ta nieufność była skierowana przeciwko mnie, czy raportowi Menedżera zadań mojego hosta (który jest być może winowajcą), ale dla wszystkich sceptyków, oto zrzut ekranu z tych procesów na maszynie głównej:

Menedżer zadań VirtualBox

DrFredEdison
źródło
Zastanawiałem się dzisiaj dokładnie nad tym samym, kiedy uruchomiłem dwie maszyny wirtualne VBox na raz.
MartW
W Menedżerze zadań włącz niektóre inne kolumny pamięci (Widok-> Wybierz kolumny ...). Pamięć jest liczona na wiele różnych sposobów w systemie Windows. Na przykład „rozmiar zatwierdzenia” może być znacznie wyższy niż „Wykorzystanie pamięci”. Dokładnie to, z czego korzystać i jak je interpretować, to inna historia.
lilbyrdie,
Możliwy duplikat: superuser.com/q/17266/302
Rowland Shaw,

Odpowiedzi:

12

Jedyne miejsce w Menedżerze zadań, które wydaje się odzwierciedlać pełną kwotę, znajduje się na karcie wydajności - wartość Total Commit Charge w przybliżeniu dotrzymuje kroku kwocie przydzielonej do maszyny wirtualnej. Właśnie zamknąłem jeden z przydzielonym 1536 MB, a opłata za zatwierdzenie spadła z około 2,4 GB do 0,8 GB. Możesz do pewnego stopnia monitorować to za pomocą Virtual Box za pomocą Monitora wydajności i wybierając liczniki Process: Private Bytes dla VirtualBox, VBoxSvc, a także VirtualBox # 1, # 2 itd. (Po jednym dla każdej uruchomionej maszyny wirtualnej). Istnieje również licznik Pamięć: Zatwierdzone bajty na wszystko.

MartW
źródło
OP nie wydaje się szczególnie zainteresowany tym, co zostało przydzielone, ale pyta o to, co jest wykorzystywane. Nie jestem więc pewien, jak to się ma do jego pytania.
David Schwartz
12

Aby zrozumieć architekturę procesu VirtualBox, zobacz
Architektura VirtualBox :

Po uruchomieniu maszyny wirtualnej (VM) z GUI masz dwa okna (okno główne i maszynę wirtualną), ale działają trzy procesy. Patrząc na system z Menedżera zadań (w systemie Windows) lub monitora systemu (w systemie Linux), zobaczysz:

  1. VirtualBox, GUI dla głównego okna;
  2. Kolejny proces VirtualBox, który został uruchomiony z parametrem -startvm, co oznacza, że ​​jego proces GUI działa jak powłoka dla maszyny wirtualnej;
  3. VBoxSVC, wspomniana wyżej usługa, która działa w tle, aby śledzić wszystkie zaangażowane procesy. Zostało to automatycznie uruchomione przez pierwszy proces GUI.

Jeśli chodzi o pamięć, instrukcja obsługi stanowi:

Pamięć podstawowa

Określa ilość pamięci RAM, która jest przydzielana i przekazywana maszynie wirtualnej podczas jej działania. Określona ilość pamięci będzie wymagana od systemu operacyjnego hosta, więc musi ona być dostępna lub udostępniona jako wolna pamięć na hoście podczas próby uruchomienia maszyny wirtualnej i nie będzie dostępna dla hosta podczas działania maszyny wirtualnej. Jest to to samo ustawienie, które zostało określone w kreatorze „Nowa maszyna wirtualna”, zgodnie z wytycznymi w sekcji „Tworzenie maszyny wirtualnej” powyżej.

Oznacza to, że gość wychodzi z hosta:

  • Tyle pamięci, ile zadeklarowano
  • Każda maszyna wirtualna jest także plikiem wykonywalnym VirtualBox, dlatego musisz dodać jej pamięć.

Zawsze jest możliwe, że instrukcja VirtualBox ma kilka wersji za sobą, a najnowsze techniki optymalizacji pamięci nie są udokumentowane.

Ponadto VirtualBox może optymalizować wykorzystanie pamięci, nie przydzielając całej zdefiniowanej pamięci VM.

Przydzielanie pamięci zgodnie z wymaganiami jest optymalizacją, która może znacznie zaoszczędzić na pamięci fizycznej, ale procesy intensywnie wykorzystujące pamięć na maszynie wirtualnej mogą zostać spowolnione przez częstą potrzebę VirtualBox żądania więcej pamięci hosta.

harrymc
źródło
8
Nie jest specyficzny dla VirtualBox - patrz: serverfault.com/questions/19935
MartW
@harrymc, więc mówisz, że menedżer zadań NIE pokazuje na liście procesów, ile pamięci używa wirtualne pudełko?
Trevor Boyd Smith
@TrevorBoydSmith: Wszystko, co mówię, to to, że jest zaangażowany więcej niż jeden proces i właściwy wybór kolumn w menedżerze zadań.
harrymc
2
mój vm zajmuje 1,2 GB. w menedżerze zadań pokazuje tylko 60 MB. dlatego twierdzę, że menedżer zadań nie pokazuje całej pamięci używanej przez mój vm. chyba że możesz mi w jakiś sposób pokazać, jak ulepszyć menedżera zadań, aby wyświetlał 1,2 GB.
Trevor Boyd Smith
1
Ta cała rozmowa i wszystkie odpowiedzi są tylko odmianami pomieszania pamięci wirtualnej z pamięcią fizyczną.
David Schwartz
2

Wpisy widoczne w menedżerze zadań TaskManager nie dotyczą maszyny wirtualnej, lecz GUI VirtualBox. Karta wydajności wyraźnie pokaże, ile pamięci jest zużyte, ale bez szczegółowości procesów. Osobiście chciałbym, aby VBox używał tylko tego, czego potrzebuje, ale zgadzam się, że ważne jest, aby mógł używać tyle, ile się spodziewa, stąd też ring-fencing.

Rob Vanstone
źródło
1

Może to być powiązane z dodatkami gości VirtualBox.

Moja instalacja Ubuntu używa obecnie ~ 20 MB, jak donosi WinXP. To jest z VBoxAdditions.

Moja instalacja w Lubuntu używa obecnie ~ 90 MB, jak donosi WinXP. Właśnie go zainstalowałem; VBoxAdditions nie zostały zainstalowane.

Zużycie pamięci zależy od tego, co robi maszyna wirtualna. Mam moją instalację Ubuntu z systemem ziproxy; kiedy robię coś, co mówi ziproxy, zużycie pamięci zwiększa się o kilka megabajtów, gdy maszyna wirtualna zaczyna działać.

Ogólnie jednak wirtualizacja jest na tyle zaawansowana, że ​​specyfikacje widoczne dla gościa nie muszą być w całości przydzielane przez hosta. Wydaje się używać dynamicznej alokacji i mocnego stronicowania.

pomocna dłoń
źródło
1

Jasne jest, że istnieją tutaj ogromne różnice. Naprawdę nie rozumiem, w jaki sposób GuestOS może korzystać z ponad 400 MB, podczas gdy system operacyjny hosta pokazuje tylko około 75 MB przydzielonych do maszyny wirtualnej. Czy są jakieś inne procesy używane przez VirtualBox, które nie są tak wyraźnie nazwane?

Patrzysz na to, co jest używane na hoście, a nie na to, co jest przydzielane . Gość nie używa jeszcze ponad 400 MB pamięci RAM hosta.

Chciałbym również wiedzieć, czy jeśli uruchomię komputer o pojemności 1 GB, czy zabierze mi to 1 GB z mojego systemu operacyjnego, czy tylko tyle pamięci, ile aktualnie używa maszyna gościa?

Zarezerwuje 1 GB pamięci RAM, jednak może skończyć przy użyciu znacznie mniejszej ilości. Jeśli gość nie używa części tej pamięci, pamięć RAM hosta może być używana do wielu innych celów (takich jak buforowanie stron czystego dysku), nawet jeśli jest zarezerwowana dla gościa. I nawet jeśli gość korzysta z części tej pamięci, jeśli nie ma dostępu do niej wystarczająco długo, nadal może zostać wyrzucony z pamięci fizycznej poprzez zamianę oportunistyczną.

Niestety, wdałeś się w niezwykle skomplikowany problem i jego wyjaśnienie zajęłoby wiele stron. W odpowiedziach na to pytanie jest wiele niepoprawnych informacji.

David Schwartz
źródło
0

Możesz to zobaczyć za pomocą doskonałej aplikacji VMMap SysInternals :

  1. Najpierw musisz znaleźć odpowiedni proces, więc uruchom na przykład Process Hacker lub Process Explorer SysInternals
  2. Wyświetl listę procesów jako drzewo
  3. Zlokalizuj proces VBoxSVC.exe, VBoxHeadless.exejeśli uruchomiona jest maszyna wirtualna , powinien mieć kilka procesów potomnych
  4. Jeśli uruchomionych jest wiele maszyn wirtualnych, będzie wiele gałęzi VBoxHeadless.exeprocesów, wybierz odpowiednią gałąź, sprawdzając wiersz poleceń procesu, zawiera on identyfikator maszyny wirtualnej
  5. Interesuje Cię najniższy VBoxHeadless.exew branży (tzn. Nie ma już dzieci, tylko rodzic, więc to liść), pamiętaj o jego PID
  6. Uruchom VMMap
  7. Wybierz odpowiedni VBoxHeadless.exeproces według jego PID i kliknij OK

W moim przypadku, wszystkie zgłoszone prywatnych bajtów , ustawić roboczą i Committed pamięć VMMap niemal dokładnie dopasować ilość pamięci przypisanej do VM w VirtualBox.

Dawid Ferenczy Rogožan
źródło