Episode ini membahas scaling microVM: mencapai ribuan microVM per host dengan jailer per VM, cgroup v2, page cache sharing, dan memory overcommit via balloon, serta praktik operasional berupa daemon per microVM, health check, dan garbage collection snapshot.

Di episode 18 kita melihat produk-produk yang berdiri di atas Firecracker — semuanya bermuara pada satu pertanyaan ekonomi: berapa banyak microVM yang bisa hidup dalam satu host? Episode 19 membahas scaling: teknik yang memungkinkan densitas ribuan microVM per host, dan disiplin operasional yang menjaganya tetap sehat.
Mengapa episode ini penting? Firecracker ada untuk membuat densitas tinggi itu mungkin — boot 125 ms dan overhead < 5 MiB hanya berarti jika ratusan bahkan ribuan VM bisa berbagi satu host. Di episode inilah angka-angka itu diterjemahkan menjadi kapasitas nyata, dengan trade-off yang jujur.
Sebuah host server modern (misal 192 vCPU, 512 GB RAM) bisa menampung berapa microVM? Mari hitung dengan data yang kita punya:
Faktor pembatasnya bukan sekadar RAM: ada vCPU, page cache, I/O, dan limit kernel (jumlah fd, thread, inotify). Densitas realistis ditentukan oleh load test (episode 16), bukan perhitungan kertas.
Setiap microVM dijalankan lewat jailer dengan --id unik (episode 7). Overhead per jailer kecil — beberapa proses dan cgroup — tapi nilainya besar:
<id> adalah cara bersih melepas semua resource.Pada skala ribuan, kebiasaan yang baik menjadi wajib: jangan pernah melewati jailer "karena cepat". Kode yang mengelola ribuan VM tanpa jailer adalah kecelakaan yang sedang menunggu.
Pada densitas tinggi, satu VM yang bocor bisa menghabiskan host. cgroup v2 memberi kontrol terstruktur:
mkdir -p /sys/fs/cgroup/fc/vm-001
echo 536870912 > /sys/fs/cgroup/fc/vm-001/memory.max
echo 500000 100000 > /sys/fs/cgroup/fc/vm-001/cpu.max
echo <pid> > /sys/fs/cgroup/fc/vm-001/cgroup.procsDi cgroup v2, ada satu bonus yang penting untuk densitas: kontrol memori lebih presisi, termasuk pembatasan swap dan accounting page cache. Dengan batas per VM, satu VM yang rakus tidak menjatuhkan host — ia menabrak batasnya sendiri.
Ini salah satu teknik densitas yang paling berdampak. Saat banyak VM memakai rootfs yang sama, kernel host menyimpan halaman file yang sama sekali di page cache — dan semua VM berbagi.
cat /proc/meminfo | grep -i cachedAgar sharing maksimal:
Di sinilah keputusan image di episode 8 bertemu ekonomi host: image yang sama, read-only, dan ringan = lebih banyak VM per host.
Balloon (episode 10) memberi dimensi lain: memori yang dijanjikan tidak selalu dipakai. Orchestrator yang cerdas memakai statistik balloon untuk overcommit:
mem_size_mib lebih besar dari kebutuhan tipikal.deflate_on_oom sebagai pengaman).Overcommit memperbanyak jumlah VM yang bisa dijanjikan — dengan risiko: jika semua VM butuh memori puncak bersamaan, host bisa kehabisan. Disiplinnya:
deflate_on_oom: true di semua VM.Warning
Overcommit adalah kontrak statistik: ia mengandalkan asumsi bahwa tidak semua VM membutuhkan memori penuh pada saat yang sama. Asumsi itu harus diverifikasi dengan monitoring — jika metrik menunjukkan tekanan memori host yang terus-menerus, turunkan overcommit sebelum terjadi OOM massal.
Teknik di atas tidak berharga tanpa operasi yang disiplin. Tiga pilar:
Pada skala besar, VM tidak dikelola satu per satu lewat terminal. Satu daemon atau agent per microVM (atau per host) yang mengelola siklus hidup: launch, health check, restart, cleanup. Ini adalah peran Flintlock (episode 12) atau agent buatan sendiri. Polanya: kontrol terpusat, eksekusi per-VM, state yang bisa diaudit.
Setiap VM harus punya definisi "sehat". Indikator yang berguna:
Health check per-VM pada skala ribuan harus ringan — jangan menciptakan beban yang lebih besar dari VM yang dipantau.
Snapshot (episode 9) menumpuk cepat: tiap suspend/resume menyisakan file state dan memori. Tanpa pembersihan, disk host terisi dan pipeline restore melambat. Disiplin yang sehat:
find /snapshots -name '*.mem' -mtime +7 -delete
find /snapshots -name 'base' -mtime +7 -deleteAturan praktis: snapshot yang tidak diakses dalam periode tertentu (sesuai SLA) dihapus, dan pembersihan dijalankan sebagai job terjadwal dengan audit.
Densitas bukan target yang bebas biaya. Semakin padat:
Grafik yang harus kalian bangun di lab (episode 16): boot time vs jumlah VM, restore time vs jumlah VM. Titik di mana kurva mulai menanjak adalah densitas yang sehat — bukan angka maksimal yang bisa di-boot sekaligus.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan menjaga sistem tetap terlihat: Observability & Troubleshooting — membaca log Firecracker dengan level dan ratelimit, mengambil metrics lewat API /metrics, tracing, men-debug lewat serial console, menangani error KVM dan kegagalan restore snapshot, serta memakai firecracker --help dan gdb saat semua cara lain gagal.