Hai semuanya, apa kabar? Kali ini aku mau bahas sedikit mengenai Memory Ballooning, salah satu fitur yang ada di Proxmox VE. Pada sistem virtualisasi konvensional, setiap VM “dipatok” pada jumlah RAM tertentu, dan RAM itu tidak bisa dipakai orang lain meskipun VM tersebut sedang nonaktif.
Ibarat balon, memory ballooning memungkinkan “balon” ini bisa mengembang (inflate) ketika host butuh RAM, dan mengempis (deflate) ketika VM butuh RAM kembali. Yang mengembang dan mengempis bukan RAM secara fisik, melainkan jumlah halaman memori yang diserahkan oleh guest OS (VM) ke host. VM yang memutuskan memori mana yang diserahkan ke PVE. PVE hanya “meminta” sejumlah target memori; sistem operasi di dalam VM yang memilih (biasanya cache dan buffer) halaman mana yang aman untuk dilepas tanpa mengganggu proses yang sedang berjalan.
Fitur ini ada karena sebagian besar VM jarang memakai seluruh RAM yang dialokasikan secara bersamaan. Sebuah VM yang menjalankan aplikasi ringan mungkin hanya butuh 1–2 GB dari 8 GB yang tersedia, terutama pada jam-jam sepi. Tanpa ballooning, sisa RAM itu “menganggur” dan tidak bisa dimanfaatkan oleh VM lain yang sedang sibuk. Dengan ballooning, host bisa meminjam RAM yang tidak terpakai dari VM yang workload-nya sedang rendah, dan memberikannya ke VM yang membutuhkan.
Cara kerja:
- Host mendeteksi bahwa RAM-nya mulai penuh (secara default, auto-ballooning aktif saat pemakaian host mendekati 80% ).
- QEMU (proses yang menjalankan VM) mengirim permintaan “inflate” ke balloon driver di dalam guest, beserta jumlah memori yang diminta untuk dilepas.
- Guest OS memilih halaman mana yang akan diserahkan (biasanya page cache dan buffer) lalu “mengunci” halaman itu ke dalam balon.
- QEMU melepaskan mapping halaman memori tersebut dari ruang alamat VM, dan host pun bisa memakai RAM fisik itu untuk keperluan lain.
- Ketika VM membutuhkan memori lagi, QEMU mengirim permintaan “deflate”, dan halaman-halaman tadi dikembalikan ke VM.
Ballooning bukanlah fitur yang harus “selalu aktif” karena bisa saja kita tidak terlalu memerlukan fungsinya. Bisa saja lebih baik fitur ini tidak diaktifkan:
Database dan Layanan Sensitif Memori
PostgreSQL, MySQL, Elasticsearch, dan sejenisnya mengukur ukuran cache dan buffer pool berdasarkan RAM yang tersedia saat startup. Jika host diam-diam mengambil kembali sebagian RAM di tengah operasi, performa bisa menurun.
VM dengan PCI Passthrough atau vGPU
Perangkat yang di-passthrough akan diarahkan ke alamat fisik guest yang tetap, sehingga driver tidak bisa melakukan inflate atau deflate di sekitarnya dengan aman. Ballooning tidak akan berfungsi dengan benar pada VM seperti ini.
VM dengan “kesepakatan” tertentu
Jika kamu sudah “berjanji” kepada tim lain atau klien bahwa sebuah VM akan selalu mendapatkan RAM penuh sesuai konfigurasinya, jangan mengandalkan ballooning. Matikan saja, dan berikan RAM secara dedicated.
Workload Latency-Sensitive
Untuk workload yang sangat sensitif terhadap latensi, siklus inflate/deflate bisa menimbulkan risiko yang tidak perlu. Lebih aman dimatikan.
Penutup
Memory Ballooning adalah salah satu fitur Proxmox yang sering “bekerja diam-diam”. Ia membuat overcommit* menjadi lebih aman, meningkatkan kepadatan VM, dan memungkinkan host merespons perubahan beban secara dinamis
Tulisan kali ini sampai di sini dulu ya. Sampai jumpa. Bye.