Bagaimana cara kerja penggunaan memori VirtualBox?

38

Saya telah menjalankan beberapa VM dengan VirtualBox, dan penggunaan memori dilaporkan dari berbagai sudut pandang, dan saya mengalami kesulitan menentukan berapa banyak memori yang sebenarnya digunakan oleh VM saya. Berikut ini sebuah contoh:

  • Saya memiliki VM yang menjalankan Windows 7 (sebagai OS Guest) di mesin Windows XP Host saya.
  • Mesin Host Memiliki 3 GB RAM
  • Guest VM diatur untuk memiliki memori dasar 1 GB
  • Jika saya menjalankan Task Manger pada OS Guest, saya melihat penggunaan memori sebesar 430 MB
  • Jika saya menjalankan Task Manger pada OS host, saya melihat 3 proses yang tampaknya milik VirtualBox:
    1. VirtualBox.exe (1), menggunakan memori 60 MB (Yang ini tampaknya paling banyak menggunakan CPU)
    2. VirtualBox.exe (2), menggunakan memori 20 MB
    3. VBoxSvc.exe, menggunakan memori 11,5 MB
  • Saat menjalankan VM, penggunaan memori Host OS adalah sekitar 2 GB
  • Ketika saya mematikan VM, OS Host itu kembali ke penggunaan memori turun menjadi sekitar 900 MB

Jadi jelas, ada beberapa perbedaan besar di sini. Saya benar-benar tidak mengerti bagaimana GuestOS dapat menggunakan 400+ MB, sedangkan Host OS hanya menunjukkan sekitar 75 MB yang dialokasikan untuk VM. Apakah ada proses lain yang digunakan oleh VirtualBox yang tidak jelas namanya?

Juga, saya ingin tahu apakah saya menjalankan mesin dengan 1 GB, apakah itu akan mengambil 1 GB dari OS host saya, atau hanya jumlah memori yang digunakan mesin Guest saat ini?

Memperbarui:

Seseorang menyatakan ketidakpercayaan atas nomor penggunaan memori saya, dan saya tidak yakin apakah ketidakpercayaan itu diarahkan kepada saya, atau pelaporan Task Manager Host OS saya (yang mungkin pelakunya), tetapi untuk setiap skeptis, berikut adalah screenshot dari proses-proses tersebut pada mesin host:

Manajer tugas VirtualBox

DrFredEdison
sumber
Saya bertanya-tanya hal yang persis sama sebelumnya hari ini ketika menjalankan dua VBox VMs sekaligus.
MartW
Di Manajer tugas, aktifkan beberapa kolom memori lainnya (Lihat-> Pilih Kolom ...). Memori dihitung dengan berbagai cara di Windows. Misalnya, "ukuran komit" bisa secara dramatis lebih tinggi dari "Penggunaan Memori." Yang mana yang harus digunakan dan bagaimana menafsirkannya adalah cerita yang berbeda.
lilbyrdie 6-10
Kemungkinan rangkap: superuser.com/q/17266/302
Rowland Shaw

Jawaban:

12

Satu-satunya tempat di Task Manager yang tampaknya mencerminkan jumlah penuh ada di tab kinerja - nilai Total Biaya Komit secara kasar mengimbangi jumlah yang dialokasikan untuk VM. Saya baru saja menutup satu dengan alokasi 1536MB, dan biaya komit turun dari sekitar 2,4GB menjadi 0,8GB. Anda dapat memantau sampai batas tertentu ini terhadap Virtual Box menggunakan Monitor Kinerja, dan memilih Proses: Counter Bytes Pribadi untuk VirtualBox, VBoxSvc, dan juga VirtualBox # 1, # 2, dll (satu untuk setiap VM yang menjalankan). Ada juga Memory: Commited Bytes counter untuk semuanya.

MartW
sumber
OP tampaknya tidak terlalu tertarik dengan apa yang telah dialokasikan tetapi bertanya tentang apa yang digunakan. Jadi saya tidak yakin bagaimana ini berhubungan dengan pertanyaannya.
David Schwartz
12

Untuk memahami arsitektur proses VirtualBox, lihat
arsitektur VirtualBox :

Setelah Anda memulai mesin virtual (VM) dari GUI, Anda memiliki dua jendela (jendela utama dan VM), tetapi tiga proses berjalan. Melihat sistem Anda dari Task Manager (di Windows) atau beberapa monitor sistem (di Linux), Anda akan melihat ini:

  1. VirtualBox, GUI untuk jendela utama;
  2. Proses VirtualBox lain yang dimulai dengan parameter -stvvm, yang berarti bahwa proses GUI bertindak sebagai shell untuk VM;
  3. VBoxSVC, layanan yang disebutkan di atas, yang berjalan di latar belakang untuk melacak semua proses yang terlibat. Ini secara otomatis dimulai oleh proses GUI pertama.

Mengenai memori, Manual Pengguna menyatakan:

Memori dasar

Ini mengatur jumlah RAM yang dialokasikan dan diberikan kepada VM ketika sedang berjalan. Jumlah memori yang ditentukan akan diminta dari sistem operasi host, sehingga harus tersedia atau tersedia sebagai memori bebas pada host ketika mencoba untuk memulai VM dan tidak akan tersedia untuk host saat VM sedang berjalan. Ini adalah pengaturan yang sama yang ditentukan dalam wizard "Mesin Virtual Baru", seperti yang dijelaskan dengan pedoman di bawah bagian yang disebut "Membuat mesin virtual" di atas.

Ini berarti bahwa tamu mengeluarkan tuan rumah:

  • Memori sebanyak yang dinyatakan dengan
  • Setiap VM juga merupakan VirtualBox yang dapat dieksekusi, jadi Anda perlu menambahkan memorinya.

Selalu mungkin bahwa manual VirtualBox ada beberapa versi di belakang, dan bahwa teknik optimasi memori terbaru tidak didokumentasikan.

Selain itu, VirtualBox dapat mengoptimalkan penggunaan memori dengan tidak mengalokasikan seluruh memori VM yang ditentukan.

Mengalokasikan memori seperti yang diperlukan adalah optimasi yang dapat menghemat banyak memori fisik, tetapi proses intensif-memori dalam VM mungkin diperlambat oleh kebutuhan yang sering dibutuhkan oleh VirtualBox untuk meminta lebih banyak memori host.

harrymc
sumber
8
Ini bukan spesifik VirtualBox - lihat ini: serverfault.com/questions/19935/…
MartW
@harrymc, jadi apa yang Anda katakan adalah bahwa task manager TIDAK muncul dalam daftar proses berapa banyak memori yang digunakan oleh virtual box?
Trevor Boyd Smith
@ TrvorBoydSmith: Yang saya katakan adalah bahwa ada lebih dari satu proses yang terlibat dan untuk memilih dengan benar kolom di task manager.
harrymc
2
vm saya membutuhkan 1,2 GB. pada task manager hanya menunjukkan 60MB. jadi karena itu saya akan mengklaim bahwa task manager tidak menunjukkan semua memori yang vm saya gunakan. kecuali Anda entah bagaimana bisa menunjukkan kepada saya bagaimana men-tweak task manager untuk menunjukkan 1.2gb.
Trevor Boyd Smith
1
Seluruh percakapan ini dan semua jawaban hanyalah variasi pada kebingungan antara memori virtual dan memori fisik.
David Schwartz
2

Entri yang Anda lihat di TaskManager bukan untuk mesin virtual Anda, itu untuk GUI VirtualBox. Tab kinerja jelas akan menunjukkan kepada Anda berapa banyak total memori Anda digunakan, tetapi tanpa rincian tentang proses. Saya pribadi ingin melihat VBox hanya menggunakan apa yang dibutuhkan, tetapi setuju bahwa penting untuk dapat menggunakan sebanyak yang diharapkan, karenanya pagar cincin.

Rob Vanstone
sumber
1

Bisa terkait dengan Tambahan Tamu VirtualBox.

Instalasi Ubuntu saya saat ini menggunakan ~ 20MB seperti yang dilaporkan oleh WinXP. Ini dengan VBoxAdditions.

Instalasi Lubuntu saya saat ini menggunakan ~ 90MB seperti yang dilaporkan oleh WinXP. Baru saja menginstalnya; VBoxAdditions belum diinstal.

Penggunaan memori memang bervariasi berdasarkan apa yang dilakukan VM. Saya telah menginstal Ubuntu saya menjalankan ziproxy; ketika saya melakukan sesuatu yang berbicara ke ziproxy, penggunaan memori melonjak beberapa megabyte ketika VM mulai digunakan.

Secara umum, virtualisasi telah berkembang cukup jauh sehingga spesifikasi yang jelas untuk tamu tidak perlu dialokasikan sepenuhnya dari tuan rumah. Tampaknya menggunakan alokasi dinamis, dan paging yang kuat.

uluran tangan
sumber
1

Jadi jelas, ada beberapa perbedaan besar di sini. Saya benar-benar tidak mengerti bagaimana GuestOS dapat menggunakan 400+ MB, sedangkan Host OS hanya menunjukkan sekitar 75 MB yang dialokasikan untuk VM. Apakah ada proses lain yang digunakan oleh VirtualBox yang tidak jelas namanya?

Anda melihat apa yang digunakan pada host, bukan apa yang dialokasikan . Tamu belum menggunakan RAM 400+ MB (belum).

Juga, saya ingin tahu apakah saya menjalankan mesin dengan 1 GB, apakah itu akan mengambil 1 GB dari OS host saya, atau hanya jumlah memori yang digunakan mesin Guest saat ini?

Ini akan mencadangkan 1GB RAM, namun mungkin malah benar-benar menggunakan kurang dari itu. Jika tamu tidak menggunakan sebagian dari memori itu, RAM host dapat digunakan untuk banyak tujuan lain (seperti cache halaman disk bersih), meskipun itu disediakan untuk tamu. Dan bahkan jika tamu menggunakan sebagian dari memori itu, jika tidak mengaksesnya cukup lama, ia masih bisa dikeluarkan dari memori fisik melalui pertukaran oportunistik.

Sayangnya, Anda telah mengarungi masalah yang sangat kompleks dan butuh banyak halaman untuk benar-benar menjelaskannya. Ada banyak informasi yang salah dalam jawaban untuk pertanyaan ini.

David Schwartz
sumber
0

Anda dapat melihatnya menggunakan VMMap aplikasi hebat SysInternals :

  1. Pertama, Anda perlu menemukan proses yang tepat, jadi mulailah misalnya Process Hacker atau Proses Explorer SysInternals
  2. Tampilkan daftar proses sebagai pohon
  3. Temukan proses VBoxSVC.exe, itu harus memiliki beberapa proses anak VBoxHeadless.exejika VM sedang berjalan
  4. Jika beberapa VM berjalan, akan ada banyak cabang VBoxHeadless.exeproses, pilih cabang yang tepat dengan memeriksa baris perintah proses, itu berisi pengidentifikasi VM Anda
  5. Anda tertarik pada yang terendah VBoxHeadless.exedi cabang (yaitu tidak memiliki anak lagi, hanya orang tua, jadi itu adalah daun), ingat PID-nya
  6. Mulai VMMap
  7. Pilih VBoxHeadless.exeproses yang tepat dengan PID-nya dan klik OK

Dalam kasus saya, semua dilaporkan byte Swasta , Bekerja set dan Committed memori dengan VMMap hampir sama persis dengan jumlah memori ditugaskan ke VM di VirtualBox.

Dawid Ferenczy Rogožan
sumber