Episode ini membahas pengaturan resource VM: --cpus boot=N dengan topology, fitur, dan PMU; --memory dengan size, hotplug, dan hugepages; serta perbandingan flag CLI dengan file konfigurasi JSON via --config. Kalian juga belajar tuning shared memory dan balloon untuk efisiensi.

Setelah VM pertama berhasil boot di episode 4, sekarang saatnya kita mengontrol sumber dayanya secara presisi. VM tanpa pengaturan CPU dan memory yang benar itu seperti mesin yang dipaksa berjalan tanpa tahu kapasitasnya — mungkin jalan, tapi tidak optimal dan rawan kehabisan resource di saat kritis.
Di episode 5 kita membahas tiga hal: bagaimana --cpus menentukan topology dan fitur vCPU, bagaimana --memory mengatur besar RAM, hotplug, dan alokasi fisik (hugepages), serta cara menulis semua ini dalam file konfigurasi JSON yang bisa di-versioning.
Jumlah vCPU default adalah 1. Untuk workload nyata, kalian biasanya butuh lebih:
cloud-hypervisor --cpus boot=8 --kernel kernel-vmlinuxboot=8 berarti VM langsung memiliki 8 vCPU saat start. Karena vCPU adalah thread di host, jangan berikan lebih banyak vCPU daripada logical CPU fisik yang tersedia — kalau tidak, akan terjadi oversubscription yang justru memperlambat workload.
Untuk guest yang peka NUMA atau aplikasi yang menebak topology CPU, set topology secara eksplisit:
cloud-hypervisor \
--cpus boot=8,topology="1 socket,8 cores,1 thread" \
--kernel kernel-vmlinuxtopology="1 socket,8 cores,1 thread" memberi tahu guest struktur fisik CPU virtual. Aplikasi seperti database sering menyetel thread pool berdasarkan topology ini — salah set bisa membuat performa tidak terduga.
Secara default, Cloud Hypervisor memaparkan fitur CPU yang didukung host. Kalian bisa menyesuaikan fitur yang diekspos dengan features=:
cloud-hypervisor --cpus boot=4,features="amx,pmu" --kernel kernel-vmlinuxpmu mengaktifkan Performance Monitoring Unit virtual sehingga guest bisa memakai perf. amx mengaktifkan Advanced Matrix Extensions — penting untuk workload AI/ML. Fitur ini harus didukung host fisik; jika tidak, VM akan gagal start dengan error yang jelas.
vCPU tambahan bisa ditambahkan saat VM berjalan (detail di episode 8), tetapi kapasitas totalnya sudah ditentukan di awal dengan max=:
cloud-hypervisor --cpus boot=2,max=16 --kernel kernel-vmlinuxmax=16 mengizinkan penambahan vCPU dari 2 sampai 16 tanpa restart — strategi khas untuk menangani lonjakan beban.
cloud-hypervisor \
--memory size=4G,hotplug_size=12G,hotplugged_size=0 \
--cpus boot=4,max=16 \
--kernel kernel-vmlinuxsize=4G: RAM awal 4 GB.hotplug_size=12G: kapasitas maksimum tambahan memory yang bisa di-hotplug.hotplugged_size=0: tidak ada memory yang di-hotplug saat start.Pola ini memberi ruang tumbuh tanpa membayar memory fisik di awal — sangat cocok untuk workload yang beban puncaknya tidak terduga.
Alokasi memory halaman normal (4 KB) memaksa TLB bekerja lebih keras. Dengan hugepages (misal 2 MB atau 1 GB), jumlah entri TLB berkurang drastis sehingga memory access jauh lebih cepat — terutama untuk workload memory-intensive.
echo 2048 | sudo tee /proc/sys/vm/nr_hugepagesLalu arahkan guest memory ke file hugepage:
cloud-hypervisor --memory size=4G,hugepages=on,shared=on --kernel kernel-vmlinuxhugepages=on mengalokasikan RAM guest dari pool hugepage host; shared=on membuka memory mapping agar bisa diakses proses lain (dibutuhkan untuk snapshot dan live migration). Kita optimalkan lebih jauh di episode 20.
Balloon driver memungkinkan host mengambil kembali memory yang tidak terpakai guest. Cloud Hypervisor mendukung virtio-balloon: host "mengempiskan" balloon untuk menekan guest mengembalikan halaman memory, atau "menggembungkan" untuk memberinya lagi. Ini mekanisme oversubscription memory yang umum di cloud — kita bahas operasinya saat hotplug di episode 8.
Shared memory (shared=on) memetakan RAM guest sebagai file yang bisa di-mmap proses lain — prasyarat untuk vhost-user device yang membaca ring buffer langsung dari memory guest.
Semakin banyak opsi, semakin panjang baris perintah. Untuk konfigurasi yang bisa di-versioning, Cloud Hypervisor mendukung file JSON lewat --config. Contoh file yang setara dengan perintah boot episode 4:
{
"kernel": {
"path": "kernel-vmlinux"
},
"disk": [
{
"path": "ubuntu.raw"
}
],
"cpus": {
"boot": 4
},
"memory": {
"size": 4294967296
},
"net": [
{
"tap": "ch0",
"ip": "192.168.100.1",
"mac": "a8:21:95:80:35:e6"
}
],
"cmdline": {
"args": "console=ttyS0 root=/dev/vda1 rw quiet"
}
}Perhatikan: size ditulis dalam bytes (4294967296 = 4 GB), bukan string. Jalankan dengan:
cloud-hypervisor --config guest.jsonKonfigurasi JSON adalah sumber kebenaran yang bisa disimpan di Git, di-review, dan di-versioning — praktik yang kita dorong terus di series ini. Untuk memudahkan, ada opsi --api-socket yang mengekspos kontrol runtime (episode 8), dan format config bisa dikonversi antar keduanya dengan cloud-hypervisor --config-file pada versi terbaru.
Warning
Dua jebakan umum saat pindah dari flag CLI ke JSON: (1) ukuran size di JSON memakai bytes, bukan notasi seperti 4G; (2) bagian JSON yang opsional tetap harus memakai struktur yang lengkap (misal { "size": 4294967296 }, bukan { "size": "4G" }). Kesalahan tipe data menghasilkan error parse yang samar.
nr_hugepages nol dan pool penuh, VM gagal start. Siapkan pool sesuai --memory size.max: beri ruang hotplug sejak awal; menambah kapasitas setelah start sangat terbatas.Tip
Verifikasi hasil di guest setiap kali mengubah resource: nproc, lscpu, free -h, dan cat /proc/meminfo di dalam VM memberi konfirmasi bahwa topology dan memory yang kalian set benar-benar terlihat oleh sistem operasi guest.
Inti yang harus dibawa pulang:
--cpus boot=N mengatur vCPU awal; topology, features, dan max memberi kontrol lanjutan.--memory size= untuk RAM awal, hotplug_size untuk ruang tumbuh, hugepages untuk performa.--config adalah cara tepat untuk konfigurasi yang reproducible dan bisa di-review.4G.Di episode 6 selanjutnya kita akan mengatur storage: block, pmem, dan virtio-fs — menyajikan disk virtio-blk dari berbagai format (raw/qcow2), persistent memory, sharing filesystem dengan host via virtio-fs, dan konversi image dengan qemu-img. Di sinilah data kalian benar-benar disimpan dan dibagi.