Belajar Cloud Hypervisor - Networking: Tap, vhost-user & vDPA
Episode 7 of 23

Belajar Cloud Hypervisor - Networking: Tap, vhost-user & vDPA

Episode ini membangun networking VM: menyiapkan TAP dan bridge di host, menghubungkan NIC ke guest dengan --net tap=...,mac=...,ip=..., meng-offload data plane ke daemon vhost-user untuk performa tinggi, dan mengenal vDPA yang masih eksperimental. Kalian juga belajar menyusun multiple NIC.

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

Pendahuluan

Setelah storage beres di episode 6, tibalah saatnya menghubungkan VM ke dunia luar. Networking di Cloud Hypervisor dibangun di atas konsep Linux yang sudah kalian kenal — TAP device — dan diperluas dengan vhost-user untuk offload data plane serta vDPA untuk hardware virtio.

Bayangkan TAP seperti kabel virtual yang menjulur dari dalam VM ke host. Di ujung host, kabel itu bisa disambungkan ke bridge (seperti switch fisik) sehingga VM bisa bicara dengan VM lain dan dunia luar. Memahami model ini sejak awal mencegah kebingungan saat traffic VM tidak mengalir seperti yang diharapkan.

Dasar: TAP dan Bridge di Host

Membuat TAP

TAP adalah antarmuka L2 virtual: paket yang dikirim dari VM muncul di antarmuka ini, dan apa yang ditulis host ke TAP masuk ke VM. Cloud Hypervisor membuat TAP sendiri jika diberi nama, asalkan binary punya CAP_NET_ADMIN (episode 3):

Cek TAP yang dibuat Cloud Hypervisor
ip link show type tap

Jika tidak ingin Cloud Hypervisor membuat TAP otomatis, buat manual lalu serahkan ke VMM:

Buat TAP manual
sudo ip tuntap add dev ch0 mode tap user "$USER"
sudo ip link set ch0 up

user "$USER" menyerahkan kepemilikan TAP ke user kalian sehingga Cloud Hypervisor bisa memakainya tanpa root.

Menyatukan dengan Bridge

TAP sendiri tidak berguna tanpa rute keluar. Buat bridge, masukkan TAP dan NIC host ke dalamnya:

Buat bridge dan hubungkan TAP
sudo ip link add name br0 type bridge
sudo ip link set ch0 master br0
sudo ip link set br0 up

Sekarang VM yang terhubung ke ch0 bisa saling bicara (melalui br0) dan ke luar (jika NIC host ikut dimasukkan dan routing diatur). Pastikan ip_forward aktif untuk lalu lintas antar-VM:

Aktifkan IP forwarding
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Menghubungkan NIC ke Guest

Flag --net

Bentuk paling umum menghubungkan TAP yang sudah ada ke VM:

Sajikan NIC dengan TAP yang sudah ada
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=os.raw \
  --net tap=ch0,ip=192.168.100.1,mac=a8:21:95:80:35:e6 \
  --cpus boot=2 \
  --memory size=2G
  • tap=ch0: pakai TAP yang sudah dibuat.
  • ip=192.168.100.1: alamat yang di-assign ke antarmuka TAP di sisi host.
  • mac=a8:21:95:80:35:e6: MAC address untuk NIC guest — selalu set eksplisit agar stabil (beberapa lisensi dan DHCP mengandalkan MAC yang tetap).

Jika tap tidak disebut, Cloud Hypervisor membuat TAP baru dengan nama yang ditentukan — syaratnya binary punya CAP_NET_ADMIN.

Multiple NIC

Skenario umum: satu NIC untuk manajemen, satu untuk data. Sajikan beberapa antarmuka:

Dua NIC dengan peran berbeda
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=os.raw \
  --net tap=mgmt,ip=192.168.1.1,mac=a8:21:95:80:00:01 \
  --net tap=data,ip=10.0.0.1,mac=a8:21:95:80:00:02 \
  --cpus boot=4 \
  --memory size=4G

Di dalam guest, NIC pertama muncul sebagai enp0s2, kedua sebagai enp0s3 (urutan bisa berbeda — jangan mengandalkan nama saja; gunakan MAC untuk identifikasi).

IP statis di guest

Setelah VM boot, konfigurasi IP di dalam guest (contoh dengan iproute2):

Set IP di guest
ip addr add 192.168.100.10/24 dev enp0s2
ip link set enp0s2 up
ip route add default via 192.168.100.1

vhost-user: Offload Data Plane

Untuk performa puncak, data plane bisa diserahkan ke daemon eksternal lewat vhost-user. Daemon memegang fd yang memungkinkan akses langsung ke memory guest (via shared memory), sehingga paket tidak perlu bolak-balik ke proses VMM.

Jalankan daemon vhost-user net di host
vhost-user-net --socket-path /tmp/vhost-net.sock \
  --netdev type=tap,id=net0,ifname=ch0 \
  --socket-mem=1024

Lalu sambungkan ke VM:

VM memakai vhost-user net
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=os.raw \
  --net vhost_user=true,socket=/tmp/vhost-net.sock,mac=a8:21:95:80:35:e6 \
  --cpus boot=2 \
  --memory size=2G

Keuntungannya: paket ditangani di daemon yang bisa dijalankan di CPU core terpisah, menurunkan latency dan memaksimalkan throughput. Biayanya: satu proses tambahan yang harus dijaga tetap hidup — jika daemon mati, NIC guest putus.

Note

vhost-user memerlukan guest memory dengan shared=on (episode 5), karena daemon perlu memetakan memory guest untuk mengakses ring buffer dan buffer packet. Tanpa itu, VM gagal start dengan error terkait memory sharing.

vDPA: Virtio untuk Hardware

vDPA (vhost Data Path Acceleration) adalah teknologi yang menghubungkan hardware virtio ke VM: perangkat network fisik (seperti SmartNIC) yang mendukung virtio disajikan langsung ke guest tanpa emulasi software. Hasilnya: performa near-native dengan driver virtio standar.

Di Cloud Hypervisor, dukungan vDPA masih eksperimental. Ide kerjanya: alih-alih daemon userspace, data plane ditangani oleh perangkat keras; VMM cukup menghubungkan guest ke device vDPA host.

Praktik umum setup vDPA di host
vdpa dev add name vdpa0 mgmtdev pci/0000:01:00.0

Karena sifatnya eksperimental dan bergantung hardware spesifik, gunakan vDPA hanya setelah memverifikasi kompatibilitas di lingkungan kalian. Untuk sebagian besar kasus, TAP biasa atau vhost-user sudah cukup.

Diagnosa Networking

Saat traffic tidak mengalir, periksa berurutan:

Cek konektivitas host
ip addr show br0
ip addr show ch0
ping -c 3 192.168.100.10

Jika host bisa ping guest tapi guest tidak bisa internet, periksa routing dan forwarding di host. Jika tidak ada lalu lintas sama sekali, cek status NIC di dalam guest:

Cek NIC di guest
ip addr show
ip link show
ethtool -k enp0s2 | head

ethtool -k menampilkan offload features — fitur seperti TSO/GSO yang tidak didukung bisa menyebabkan paket besar gagal melewati TAP yang tidak cocok.

Warning

Jangan pernah berbagi satu TAP untuk dua VM — setiap VM butuh antarmuka sendiri; menggabungkannya menyebabkan MAC conflict dan traffic chaos. Gunakan bridge untuk menghubungkan banyak VM, bukan berbagi TAP yang sama.

Penutup

Inti yang harus dibawa pulang:

  • TAP adalah kabel virtual; bridge adalah switch yang menghubungkannya.
  • --net tap=...,mac=...,ip=... menghubungkan NIC guest ke TAP host.
  • Selalu set MAC eksplisit untuk stabilitas.
  • vhost-user meng-offload data plane ke daemon untuk performa; butuh shared=on.
  • vDPA menghubungkan hardware virtio ke guest, masih eksperimental.
  • Diagnosa berurutan: host (ip/br0/ch0) → guest (ip/ethtool) → routing.

Di episode 8 selanjutnya kita akan membahas hotplug: CPU, memory, dan device — menambah vCPU dan RAM secara live dengan --cpus hotplug dan ACPI, refleksinya di guest, serta device passthrough dengan VFIO untuk GPU dan perangkat lain, termasuk vfio-user yang masih eksperimental. VM kalian mulai bisa "tumbuh" tanpa restart.

Belajar Cloud Hypervisor - Networking: Tap, vhost-user & vDPA | Belajar Cloud Hypervisor