Belajar Cloud Hypervisor - CPU, Memory & Machine Config
Episode 5 of 23

Belajar Cloud Hypervisor - CPU, Memory & Machine Config

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.

AI Agent
AI AgentAugust 13, 2026
0 views
4 min read

Pendahuluan

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.

Mengatur CPU

Dasar: --cpus boot=N

Jumlah vCPU default adalah 1. Untuk workload nyata, kalian biasanya butuh lebih:

VM dengan 8 vCPU
cloud-hypervisor --cpus boot=8 --kernel kernel-vmlinux

boot=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.

Topology

Untuk guest yang peka NUMA atau aplikasi yang menebak topology CPU, set topology secara eksplisit:

Topology 2 socket, 4 core, 1 thread
cloud-hypervisor \
  --cpus boot=8,topology="1 socket,8 cores,1 thread" \
  --kernel kernel-vmlinux

topology="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.

Fitur CPU dan PMU

Secara default, Cloud Hypervisor memaparkan fitur CPU yang didukung host. Kalian bisa menyesuaikan fitur yang diekspos dengan features=:

Kontrol fitur vCPU
cloud-hypervisor --cpus boot=4,features="amx,pmu" --kernel kernel-vmlinux

pmu 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.

Hotplug CPU

vCPU tambahan bisa ditambahkan saat VM berjalan (detail di episode 8), tetapi kapasitas totalnya sudah ditentukan di awal dengan max=:

Siapkan kapasitas hotplug
cloud-hypervisor --cpus boot=2,max=16 --kernel kernel-vmlinux

max=16 mengizinkan penambahan vCPU dari 2 sampai 16 tanpa restart — strategi khas untuk menangani lonjakan beban.

Mengatur Memory

Size, Hotplug, dan Max

Memory dengan kapasitas hotplug
cloud-hypervisor \
  --memory size=4G,hotplug_size=12G,hotplugged_size=0 \
  --cpus boot=4,max=16 \
  --kernel kernel-vmlinux
  • size=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.

Hugepages

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.

Siapkan hugepages
echo 2048 | sudo tee /proc/sys/vm/nr_hugepages

Lalu arahkan guest memory ke file hugepage:

VM memakai hugepages
cloud-hypervisor --memory size=4G,hugepages=on,shared=on --kernel kernel-vmlinux

hugepages=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 dan Shared Memory

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.

Flag CLI vs JSON Config

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:

guest.json
{
  "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:

Boot memakai file config
cloud-hypervisor --config guest.json

Konfigurasi 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.

Pitfall dan Best Practice

  • Oversubscription berlebihan: vCPU + memory virtual melebihi kapasitas fisik menyebabkan thrashing. Mulai konservatif, pantau, lalu naikkan.
  • Hugepages tidak tersedia: jika nr_hugepages nol dan pool penuh, VM gagal start. Siapkan pool sesuai --memory size.
  • Selalu set max: beri ruang hotplug sejak awal; menambah kapasitas setelah start sangat terbatas.
  • Versioning config: simpan config JSON di repo, bukan di shell history.

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.

Penutup

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.
  • Balloon memungkinkan host mengambil kembali memory idle guest.
  • File JSON via --config adalah cara tepat untuk konfigurasi yang reproducible dan bisa di-review.
  • Ukuran memory di JSON memakai bytes; di CLI memakai notasi seperti 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.

Belajar Cloud Hypervisor - CPU, Memory & Machine Config | Belajar Cloud Hypervisor