Bagaimana mesin virtual dapat mengkonsumsi begitu sedikit RAM pada mesin host fisik?

24

Saya menjalankan VirtualBox pada mesin Windows XP dengan RAM 2GB. Saya telah membuat mesin Ubuntu virtual dan mengalokasikannya memori dasar 750MB.

Hanya untuk mengujinya, saya menjalankan 20 hal sekaligus di mesin virtual. Menurut "top" di ubuntu, 750 MB memori digunakan, serta ruang swap yang cukup besar.

Namun, di Windows Task Manager, VitrualBox hanya menggunakan memori 45.000K. Ketika saya meminta mesin virtual untuk melakukan lebih dan lebih, penggunaan CPU dari proses VirtualBox naik (di Windows) tetapi penggunaan memori tetap sama.

Bagaimana mesin virtual yang menggunakan memori 750 MB hanya mengkonsumsi 45 MB memori pada mesin fisik?

Saya berasumsi jawabannya adalah bahwa mesin virtual tidak menggunakan memori nyata, tetapi memori simulasi (yaitu ruang swap), tetapi pasti terasa tajam seperti sedang berjalan di RAM.

UPDATE: Saya sudah bermain-main dengan perfmon seperti yang disarankan. Bahkan meringkas semua yang dapat saya pikirkan, sepertinya masih membutuhkan kurang dari 300 MB ... jadi ini masih merupakan misteri.

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936
dggoldst
sumber

Jawaban:

7

Kolom di Task Manager dapat memberikan angka yang menyesatkan - untuk penggunaan memori yang akurat per proses, Anda bisa menggunakan perfmon (Monitor Kinerja di Panel Kontrol) dan melihat angka "byte pribadi".

Untuk menunjukkan ini, masuk ke perfmon, klik untuk menambahkan penghitung (saya adalah tipe Ctrl+ Iorang). "Objek kinerja" akan menjadi "Proses", dengan "Private byte" berada di daftar penghitung - jelas Anda harus memilih proses yang relevan dari daftar sebelah kanan.

Rowland Shaw
sumber
Hai. Saya mencoba ini tetapi tidak beruntung menemukan sesuatu yang disebut Private Bytes. Bisakah Anda memberikan langkah demi langkah?
dggoldst
Telah menambahkan ...
Rowland Shaw
Terima kasih, ini sangat membantu. Saya telah menambahkan analisis ke pertanyaan. Masih tidak tahu mengapa jumlahnya tidak sampai 750.
dggoldst
Sangat aneh. Saya dapat menunjukkan bahwa PrivateBytes adalah subset dari VirtualBytes (Virtual byte adalah proporsi ruang alamat yang dialokasikan, sementara byte pribadi adalah memori yang belum dibebaskan - Anda bisa mendapatkan fragmentasi memori dengan kebocoran memori kecil, dan memiliki aplikasi mati dengan memori tidak cukup, bahkan ketika ada banyak tersedia). Mungkin pengandar virtualisasi mengalokasikan memori dengan cara yang berarti itu tidak akan muncul, yang akan masuk akal karena memori harus kebal dari paging keluar ke disk.
Rowland Shaw
Dari empat penghitung yang Anda letakkan di meja Anda, hanya "PoolNonPagedBytes" yang merupakan jumlah memori virtual yang tidak dapat dicetak, maka jumlah memori fisik yang akan digunakan. Yang lainnya semuanya virtual. Seperti ukuran memori virtual lainnya, RAM aktual yang digunakannya hampir selalu jauh lebih sedikit, Itulah salah satu poin utama dari memori virtual.
Jamie Hanrahan
5

Dengan beberapa solusi virtualisasi di Linux, cara mereka mengalokasikan memori menjadikannya sebagai kernel utama sebagai file yang dipetakan dengan memori khusus (seperti /proc/kcorefile khusus) sehingga dihitung dalam hitungan "cache" dalam output dari free, bukan "bekas" dihitung.

Saya kira sesuatu yang serupa terjadi pada lingkungan Windows Anda: 45MB akan digunakan oleh proses manajemen VirtualBox, dan 750 yang dialokasikan untuk VM itu sendiri akan dihitung di tempat lain.

David Spillett
sumber
0

Ini bisa berupa memori virtual, file yang dipetakan memori, atau yang serupa.

Sudahkah Anda mencoba menampilkan kolom lain di Task Manager?

zildjohn01
sumber
0

Jangan percaya Manajer tugas. Tidak bisa melihat semuanya.

Masalah ini lebih biasa dilihat dengan SQL Server, misalnya Dengan Sql, saya belum pernah menemukan orang yang memberi tahu saya cara mendapatkan info yang akurat dari Task Manager yang akan membuat saya percaya bahwa angka tersebut tidak tersembunyi di salah satu kolom lainnya.

sgmoore
sumber