Mengaktifkan nested virtualization dengan nested=1 untuk KVM di dalam VM, lalu menyetel performa: CPU pinning taskset dan virsh vcpupin, hugepages, KSM memory dedup, dan -cpu host invtsc untuk timing yang akurat

VM yang "jalan" belum tentu VM yang kencang. Episode 19 menutup sisi performa dan membuka fitur yang paling banyak diminta praktisi: nested virtualization (KVM di dalam VM — untuk CI/CD dan testing) serta teknik tuning performa kelas produksi — CPU pinning, hugepages, KSM, dan timing presisi.
Pola pikir penting: virtualisasi modern sudah cepat secara default, tetapi default itu dirancang untuk kompatibilitas, bukan kecepatan maksimum. Empat teknik di episode ini adalah perbedaan antara "cukup jalan" dan "mendekati bare-metal".
Nested virtualization berarti menjalankan hypervisor di dalam VM — KVM di dalam KVM. Aktifkan di host lewat modul:
echo 'options kvm_intel nested=1' | sudo tee /etc/modprobe.d/kvm_intel.confecho 'options kvm_amd nested=1' | sudo tee /etc/modprobe.d/kvm_amd.confMuat ulang modul atau reboot, lalu verifikasi:
cat /sys/module/kvm_intel/parameters/nested # Y / 1Setelah VM level-1 diberi flag vmx/svm (lewat -cpu host atau -cpu host,migratable=no), di dalam guest:
grep -E "vmx|svm" /proc/cpuinfo
ls -l /dev/kvmJika ada, guest bisa menjalankan KVM sendiri. Di libvirt, ekspos CPU host:
<cpu mode='host-passthrough' check='none'>
<feature policy='require' name='vmx'/>
</cpu>Tip
Gunakan mode='host-passthrough' saat nested atau akurasi performa lebih penting daripada kompatibilitas migrasi. Untuk VM yang harus bisa live migrate (episode 15), pakai host-model dengan feature set yang terkontrol.
Use case nyata nested: CI runners yang butuh hypervisor sendiri untuk tes (misal GitLab runner menjalankan VM), laboratorium KVM, dan uji coba Proxmox di dalam VM.
Secara default, vCPU thread bisa melompat antar core fisik — scheduler mengatur sendiri. Pinning mengunci tiap vCPU ke core spesifik, menjaga cache CPU dan NUMA tetap hangat.
sudo taskset -p -c 0-3 $(pgrep -f qemu-system)virsh vcpupin web1 0 0
virsh vcpupin web1 1 1
virsh vcpupin web1 --listDi XML, ini tersimpan sebagai <vcpupin>:
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
</cputune>Hindari mem-pin vCPU dan thread host ke core yang sama (overcommit core) — dua vCPU berebut satu core fisik justru lebih lambat.
Halaman memory Linux default 4K berarti banyak TLB miss untuk VM yang memakai banyak RAM. Hugepages (2M/1G) memotong jumlah entry TLB — I/O dan akses memori lebih cepat.
echo 2048 | sudo tee /proc/sys/vm/nr_hugepagesAgar persisten, set di /etc/sysctl.d/:
vm.nr_hugepages = 2048Aktifkan di QEMU:
qemu-system-x86_64 -m 4096 -mem-path /dev/hugepages -mem-prealloc ...Di libvirt, set memoryBacking:
<memoryBacking>
<hugepages/>
</memoryBacking>-mem-prealloc mengalokasikan halaman di awal agar tidak ada stall saat VM akses memori pertama kali.
KSM (Kernel Samepage Merging) menggabungkan halaman identik antar VM — efektif untuk banyak VM yang menjalankan OS/setting sama (lab, hosting). Aktifkan:
echo 1 | sudo tee /sys/kernel/mm/ksm/runMonitor efektivitas:
grep -E "pages_shared|pages_sharing" /sys/kernel/mm/ksm/pages_sharingKSM menghemat RAM, tetapi ada biaya CPU untuk scanning — dan memperkenalkan side-channel timing (teori keamanan). Untuk workload yang memprioritaskan keamanan atau single-VM besar, matikan KSM. Untuk farm VM seragam, aktifkan.
TSC (Time Stamp Counter) guest yang berubah-ubah saat migrasi/CPUFreq membuat aplikasi time-sensitive (dan beberapa game/DRM) kacau. invtsc membuat TSC invariant dan mengeksposnya ke guest:
qemu-system-x86_64 -cpu host,invtsc ...Di libvirt, lewat <feature> atau flag host-passthrough yang sudah mencakupnya pada kebanyakan CPU modern. Perhatian: invtsc menempelkan VM ke karakteristik clock host — membatasi migrasi antar CPU berbeda.
/dev/kvm karena CPU virtual tidak mengekspos vmx — gunakan host-passthrough.-mem-prealloc: alokasi lambat saat runtime — crash risk di high load.invtsc + migrasi: TSC invariant terkunci ke host — jangan campur dengan migrasi lintas CPU.Pada episode 19 ini, kalian telah menambal dua aspek terakhir performa.
Inti yang harus dibawa pulang:
nested=1 di kvm_intel/kvm_amd + host-passthrough di guest — untuk CI/testing.virsh vcpupin (persisten via <vcpupin>) mengurangi jitter scheduler.-mem-prealloc.-cpu host,invtsc untuk timing presisi; sadari batasannya terhadap migrasi.Di episode 20 selanjutnya, kita akan membahas QEMU 11.1 & fitur terbaru — apa saja yang berubah di rilis 2026, perbaikan UEFI dan virtio-gpu, kebijakan versioning time-based, stable branches, dan kebijakan deprecation dua rilis. Sampai jumpa di episode 20!