Cara lama memakai server: satu mesin fisik untuk satu tugas. Mesin database sibuk setiap malam ketika backup berjalan lalu menganggur seharian, mesin web ramai di jam kantor lalu sepi di malam hari, dan keduanya sama-sama menyalakan lampu di ruang server. Virtualisasi membalik pemborosan itu: satu mesin fisik yang besar menjalankan banyak mesin lengkap sekaligus, masing-masing dengan sistem operasi dan aplikasinya sendiri. Chapter ini membangun fondasi konsep yang dipakai sepanjang section — apa itu virtual machine, bagaimana hypervisor bekerja, dan mengapa CPU modern punya sirkuit khusus untuk mempercepat semuanya.
Mesin Virtual: Komputer yang Dibangun dari Software #
Mesin virtual (VM) adalah komputer utuh yang dibangun murni dari software. Hypervisor — program yang menciptakan dan mengelola VM — menyajikan perangkat keras palsu kepada sistem operasi guest: virtual CPU, memori virtual, disk virtual, dan kartu jaringan virtual. Sistem operasi guest terpasang dan berjalan di atas perangkat palsu itu tanpa perlu tahu bahwa “harddisk”-nya sesungguhnya sebuah berkas di host, dan CPU-nya hanya jatah potongan waktu dari prosesor fisik. Tiga istilah ini muncul terus di seluruh section: host adalah mesin fisik beserta sistem operasinya, guest adalah mesin virtual itu sendiri, dan hypervisor adalah perantara keduanya.
Kita sudah memakai VM sekali di Chapter Virtual Machine untuk mencoba instalasi Linux tanpa menyentuh partisi. Sekarang kita bedah sifat paling mengejutkan dari perangkat virtualnya: disk virtual hanyalah berkas biasa di filesystem host, dan berkas itu bersifat sparse — hanya memakan ruang disk yang benar-benar ditulis datanya:
truncate -s 2G disk-web.img
echo "ukuran tampak: $(stat -c %s disk-web.img) byte"
echo "terpakai disk : $(du -m disk-web.img | cut -f1) MB"
dd if=/dev/zero of=disk-web.img bs=1M count=10 conv=notrunc 2>/dev/null
echo "terpakai disk : $(du -m disk-web.img | cut -f1) MB"Output yang Dihasilkan:
ukuran tampak: 2147483648 byte
terpakai disk : 0 MB
terpakai disk : 10 MBMari kita bedah baris demi baris:
- Baris 1 (
truncate -s 2G disk-web.img): membuat berkas sparse sebesar 2 GiB —truncatehanya mencatat ukuran logikalnya tanpa menulis satu blok data pun ke disk. - Baris 2 (
stat -c %s): membaca ukuran logikal berkas, 2147483648 byte — inilah kapasitas yang “dilihat” guest sebagai harddisk 2 GB-nya. - Baris 3 (
du -m): mengukur ruang yang benar-benar terpakai di disk host — masih 0 MB karena belum ada data yang ditulis. - Baris 4 (
dd ... conv=notrunc): mensimulasikan guest yang menulis 10 MB data ke awal disk;conv=notruncmemastikan sisa berkas tidak terpotong. - Baris 5: pemakaian fisik naik menjadi 10 MB — disk virtual tumbuh saat dipakai, bukan sejak dibuat.
Berkas disk-web.img di atas adalah format raw: paling sederhana, bisa langsung di-mount, tetapi ukurannya besar bila dipindah-pindah. Format yang lebih canggih seperti qcow2 menambahkan copy-on-write, kompresi, dan snapshot di atas sifat sparse yang sama — kita akan bertemu ketiganya di Chapter VirtualBox dan KVM
.
Hypervisor Tipe 1 dan Tipe 2 #
Yang membedakan kelas hypervisor adalah posisinya terhadap hardware. Hypervisor tipe 1 (bare metal) terpasang langsung di atas hardware tanpa sistem operasi perantara: hypervisor inilah sistem operasinya, mengendalikan scheduler CPU, memori, dan perangkat, lalu menjalankan guest di atasnya. Hypervisor tipe 2 (hosted) hanyalah aplikasi biasa di atas OS desktop — ia harus meminta izin OS host untuk setiap akses ke CPU, disk, dan jaringan.
| Aspek | Tipe 1 (bare metal) | Tipe 2 (hosted) |
|---|---|---|
| Posisi terhadap hardware | langsung di atas hardware | aplikasi di atas OS host |
| Contoh | VMware ESXi, Microsoft Hyper-V, Xen | VirtualBox, VMware Workstation, Parallels Desktop |
| Jalur I/O guest | dikelola hypervisor sendiri | selalu melewati OS host |
| Tipikal dipakai di | data center, cloud | desktop, lab, belajar |
KVM menempati posisi yang menarik: modul kernel Linux menjadikan kernel host sendiri sebagai hypervisor tipe 1, sementara tiap guest berjalan sebagai proses Linux biasa yang dijadwalkan scheduler normal. Akselerasi hardware diatur oleh modul kvm, sedangkan emulasi perangkat diserahkan kepada QEMU di userspace — kombinasi inilah yang memberi KVM performa nyaris native di produksi sekaligus tampilan proses biasa di ps.
Hardware Assist: VT-x dan AMD-V #
CPU x86 klasik sesungguhnya sulit divirtualisasi secara efisien: sebagian instruksi sensitif tidak menghasilkan trap ketika dijalankan guest, sehingga hypervisor tua terpaksa menulis ulang binari guest terlebih dahulu — teknik binary translation yang lambat dan rumit. Sejak sekitar tahun 2006, Intel (VT-x) dan AMD (AMD-V) menambahkan mode CPU baru: guest berjalan di mode non-root, dan setiap instruksi sensitif otomatis menyerahkan kendali ke hypervisor di mode root. Dengan hardware assist ini, virtualisasi penuh menjadi nyaris secepat eksekusi asli.
Cara paling cepat memeriksa dukungan di Linux adalah membaca laporan lscpu. Jalankan lscpu | grep -i virtualization di terminal host; berikut contoh tampilannya pada CPU Intel yang siap:
Virtualization: VT-xBaris itu menyatakan CPU punya ekstensi VT-x. Pada CPU AMD, nilainya AMD-V; versi lscpu yang lebih baru menampilkan field Virtualization type dengan nilai full untuk kombinasi yang sama. Bila baris virtualisasi tidak muncul sama sekali, kemungkinan besarnya fitur itu dimatikan di firmware setup — aktifkan VT-x/AMD-V di BIOS/UEFI, karena banyak hypervisor menolak berjalan tanpanya. Satu level di atasnya ada VT-d (Intel) dan AMD-Vi/IOMMU yang membolehkan perangkat fisik seperti NIC atau GPU dilempar langsung ke dalam guest — teknik passthrough untuk beban kerja yang sensitif latensi.
Emulasi, Virtualisasi Penuh, dan Para-virtualisasi #
Ada tiga model menjalankan kode guest, dan kecepatannya berbeda jauh. Emulasi menerjemahkan instruksi guest satu per satu sehingga QEMU mampu menjalankan guest ARM di atas host x86 — fleksibilitas luar biasa untuk pengembangan embedded, tetapi bayarannya adalah kecepatan yang jatuh drastis. Virtualisasi penuh memakai hardware assist VT-x/AMD-V agar guest tak perlu diubah sama sekali dan berjalan nyaris native — inilah yang dilakukan KVM. Para-virtualisasi mengambil jalan tengah: guest tahu bahwa ia virtual dan memakai driver khusus virtio yang berbicara langsung ke hypervisor alih-alih meniru kartu hardware sungguhan, sehingga I/O disk dan jaringannya jauh lebih cepat daripada perangkat yang diemulasikan.
Kasus Pemakaian di Dunia Nyata #
- Mencoba sistem operasi lain tanpa memformat partisi — alasan utama VM dipakai pemula Linux.
- Menjalankan aplikasi legacy yang hanya jalan di distro lama: satu VM distro lama memeliharanya tanpa menahan seluruh server.
- Lab eksperimen yang aman: snapshot menyimpan kondisi VM yang bisa dikembalikan dalam hitungan detik setelah eksperimen gagal.
- Konsolidasi server: beberapa mesin fisik tua digantikan VM-VM di satu mesin baru yang hemat listrik dan pendingin.
- Cloud computing: menyewa komputer per jam di penyedia cloud pada dasarnya menyewa VM di hypervisor tipe 1 mereka.
Konsolidasi selalu dimulai dari soal hitung: apakah kapasitas host mencukupi seluruh rencana alokasi guest? Logika pemeriksaan itu bisa kita jalankan langsung dengan awk:
printf 'ram_gb 64\ncpu_core 16\ndisk_gb 2000\n' > host.txt
printf 'vm-web ram 8\nvm-web disk 100\n' > alokasi.txt
printf 'vm-db ram 16\nvm-db disk 200\n' >> alokasi.txt
printf 'vm-ci ram 4\nvm-ci disk 50\n' >> alokasi.txt
for res in ram disk; do
perlu=$(awk -v r="$res" '$2==r {s+=$3} END {print s}' alokasi.txt)
punya=$(awk -v k="${res}_gb" '$1==k {print $2}' host.txt)
if [ "$perlu" -le "$punya" ]; then hasil="cukup"; else hasil="KURANG"; fi
printf '%s: perlu %s, host punya %s -> %s\n' "$res" "$perlu" "$punya" "$hasil"
doneOutput yang Dihasilkan:
ram: perlu 28, host punya 64 -> cukup
disk: perlu 350, host punya 2000 -> cukupMari kita bedah baris demi baris:
- Baris 1–4: dua berkas kecil sebagai data rencana —
host.txtmencatat kapasitas host,alokasi.txtberisi daftar VM beserta jatah RAM dan disk yang diminta. - Baris 5 (
for res in ram disk): memeriksa dua sumber daya yang paling sering membatasi konsolidasi: memori dan disk. - Baris 6 (
awk -v r="$res" ...): menjumlahkan kolom ketiga dari setiap baris yang sumber dayanya cocok — pola$2==rmenyaring hanya barisramataudiskmilik VM terkait. - Baris 7: membaca kapasitas host dengan kunci
ram_gb/disk_gbyang dibentuk dari nama sumber daya. - Baris 8–9: membandingkan total kebutuhan dengan kapasitas, lalu mencetak keputusan.
Angka pada contoh menunjukkan rencana yang sehat: 28 GB RAM dan 350 GB disk masih jauh di bawah kapasitas host. Dalam praktik, RAM sering di-overcommit melebihi kapasitas fisik karena tidak semua guest memakai jatahnya penuh sekaligus — tetapi ketika seluruh guest benar-benar haus memori pada saat bersamaan, host mulai menukar memori ke swap dan performa semua VM ikut jatuh.
Konsepnya kini lengkap di tangan: VM, dua tipe hypervisor, hardware assist, dan tiga model eksekusi. Pertanyaan berikutnya praktis: dengan stack apa kita mempraktikkan semuanya di Linux? Dua kandidat utama — VirtualBox yang ramah desktop dan KVM/QEMU yang native Linux — kita bandingkan head-to-head di Chapter VirtualBox dan KVM .
Referensi lanjut: dokumentasi virtualisasi kernel Linux untuk status KVM di dalam kernel, serta panduan virtualisasi Fedora sebagai contoh ekosistem virtualisasi distro.