Definisi overcommit memori dalam mesin virtual tamu

Ketika mengelola VM tamu yang berjalan pada host virtualisasi (baik itu VMWare ESXi atau Hyper-V), ketika menganalisis masalah kinerja, orang sering menghadapi situasi ketika jumlah memori OS yang tersedia jauh lebih sedikit daripada yang dilihat oleh sistem operasi (ditugaskan). Sebagai contoh, mesin virtual dialokasikan 8 GB memori, task manager menunjukkan gratis 1 GB memori, sementara total konsumsi memori semua proses yang berjalan tidak melebihi 3 GB. Ke mana sisa 4 GB pergi??

Biasanya, alasan perilaku ini adalah penggunaan fungsi overcommit memori di hypervisor.

Memory overcommit (Saya tidak tahu definisi dalam bahasa Rusia, biarkan ada terlalu banyak memori) ini adalah fitur hypervisor yang memungkinkan Anda mengalokasikan lebih banyak memori ke mesin virtual daripada yang ada pada host fisik, tetapi tanpa menjamin bahwa pada titik waktu tertentu semua memori yang diminta dapat dialokasikan. Sebagai aturan, overcommit memungkinkan Anda untuk meningkatkan kepadatan mesin virtual pada host karena fakta bahwa memori akan didistribusikan secara dinamis di antara mereka tergantung pada beban saat ini (sumber daya dari VM yang tidak dibongkar / menganggur dapat didistribusikan kembali di antara lebih banyak dimuat)

Di VMWare, salah satu mekanisme untuk mengimplementasikan overcommited memory adalah Balon memori (Mengumpulkan memori, atau, jika Anda mau, menipu). Di Hyper-V, fungsionalitas serupa diimplementasikan oleh fungsi Memori dinamis.

Catatan. By the way, baik VMWare dan Hyper-V menggunakan kompresi memori secara luas dan cukup efektif untuk menghemat memori dan menerapkan teknologi overcommit..

Di VMWare, bola diimplementasikan melalui driver vmmemctl.sys (termasuk dalam Alat VMware), yang, jika perlu, dapat menangkap memori fisik dengan menggembungkan proses bola fiktif di dalam memori (baloon). Dengan demikian, memori yang ditempati menjadi tidak dapat diakses oleh aplikasi, dan hypervisor dapat mendistribusikan kembali memori yang dibebaskan antara VM lain. Hyper-V Dynamic memory menggunakan driver dmvsc.sys dari serangkaian layanan integrasi (komponen Dynamic Memory VSC). Pengaturan overkomit dikendalikan oleh administrator hypervisor..

Tetapi bagaimana menentukan dari dalam VM bahwa itu sebenarnya memiliki lebih sedikit memori fisik yang tersedia daripada yang dilihat oleh sistem operasi?

Pertimbangkan cara menentukan keberadaan dan ukuran driver balon di OS tamu Windows. Jadi, kami akan menganalisis situasi berikut:

VM dengan guest Windows Server 2012 R2 mengalokasikan 8 GB RAM. Manajer tugas menunjukkan bahwa memori digunakan pada 93% (memori 7,4 GB ditempati). Namun, jika Anda menambahkan jumlah memori yang digunakan semua proses yang berjalan, Anda bisa sampai pada kesimpulan yang tidak terduga - hanya 2,5 GB yang benar-benar digunakan. Kemana perginya 5 GB memori? Baik Task Manager maupun Resource Monitor tidak akan menjawab pertanyaan ini..

Untuk memahami apa yang terjadi pada memori, Anda perlu menggunakan utilitas Rammap Mark Rusinovich (dalam salah satu kasus sebelumnya saya menunjukkan cara menggunakan utilitas ini untuk mendiagnosis masalah dengan cache sistem dari sistem file). Unduh utilitas dari situs web Microsoft (https://technet.microsoft.com/en-us/library/ff700229.aspx) dan jalankan dengan hak administrator. Setelah itu, di tab Gunakan hitungan kita melihat bahwa sebagian besar memori (5,4 GB) digunakan oleh objek Pengemudi terkunci.

Ini adalah memori yang hypervisor “makan” dan didistribusikan kembali ke mesin virtual lainnya melalui driver balon di OS tamu. Yaitu tidak ada cukup memori pada host hypervisor, atau administrator hypervisor secara paksa "membunuh" sumber daya untuk VM ini.

Tata letak memori saat ini di VM pada Hyper-V dapat diberikan oleh penghitung kinerja individu di Monitor Kinerja:

  • Hyper-V Dynamic Memory -> Guest Visible Memory
  • Hyper-V Dynamic Memory -> Memori Fisik

Untuk menonaktifkan perilaku ini, administrator hypervisor harus menonaktifkan opsi di pengaturan VM Hyper-V Aktifkan Memor Dinamisy (atau menambah nilai pemesanan minimum).

Jika Anda menggunakan host VMWare ESXi, Anda dapat menggunakan pengaturan alokasi sumber daya (Pengaturan sumber daya) cadangan lebih banyak memori untuk mesin ini, atau segera simpan semua memori - Cadangan semua memori tamu (Semua terkunci).