Memahami Format XML Domain Libvirt

Dengan memahami format XML Domain pada Libvirt, kita dapat mengerti fungsi dan cara penggunaannya secara tepat, baik untuk implementasi VM di lingkungan devel maupun produksi.

MEMORY

Berikut adalah penjelasan mengenai atribut-atribut memori dalam libvirt:

1. <memory>

  • Arti: Jumlah memori maksimum yang dialokasikan untuk mesin virtual (VM) saat dijalankan.
  • Unit: Default dalam kibibytes (KiB), tetapi bisa diubah (misal: unit='GiB').
  • Fungsi: Menentukan batas atas memori yang bisa digunakan VM. Jika menggunakan ballooning, memori aktual (currentMemory) bisa lebih kecil dari nilai ini.

2. <currentMemory>

  • Arti: Jumlah memori aktual yang dialokasikan ke VM saat boot.
  • Fungsi: Digunakan untuk memory ballooning. Nilai ini bisa dinaikkan/turunkan secara dinamis (tanpa reboot) hingga batas <memory>.
  • Contoh:
    <currentMemory unit='GiB'>2</currentMemory> <!-- VM mulai dengan 2 GiB -->
    <memory unit='GiB'>4</memory> <!-- Maksimum 4 GiB -->
    

3. <hugepages>

  • Arti: Mengonfigurasi VM untuk menggunakan huge pages (halaman memori berukuran besar, misal 2MB/1GB).
  • Tujuan: Meningkatkan performa dengan mengurangi TLB misses untuk aplikasi yang intensif memori.
  • Cara Kerja:
    • Host harus dikonfigurasi untuk mendukung huge pages.
    • Pada XML libvirt, <hugepages> didefinisikan di bawah <memoryBacking>.
  • Contoh:
    <memoryBacking>
      <hugepages>
        <page size='2' unit='MiB'/>
      </hugepages>
    </memoryBacking>
    

4. <maxMemory>

  • Arti: Batas absolut memori yang bisa dialokasikan ke VM, termasuk memori yang ditambahkan secara hotplug.
  • Fungsi: Digunakan untuk memory hotplug (menambah memori saat VM berjalan).
  • Persyaratan:
    • VM harus menggunakan arsitektur yang mendukung hotplug (misal: Q35).
    • Nilai harus ≥ <memory>.
  • Contoh:
    <maxMemory slots='4' unit='GiB'>16</maxMemory> <!-- Maksimum 16 GiB -->
    

5. <maxMemory slots>

  • Arti: Jumlah slot yang tersedia untuk menambahkan modul memori (DIMM) secara hotplug.
  • Fungsi: Setiap penambahan memori menggunakan satu slot. Jika slot habis, tidak bisa menambah memori tanpa menghapus modul terlebih dahulu.
  • Contoh:
    <maxMemory slots='8' unit='GiB'>64</maxMemory> <!-- 8 slot, maks 64 GiB -->
    

VCPUS

Berikut adalah penjelasan masing-masing atribut terkait VCPU dalam Libvirt:

1. cores

Jumlah core per socket dalam topologi CPU virtual. Mengatur bagaimana CPU virtual dibagi menjadi cores di dalam setiap socket.

Contoh:

<cpu>
  <topology sockets='2' cores='4' threads='2'/>
</cpu>

2. cpuset

Daftar CPU fisik (host CPUs) yang boleh digunakan oleh vCPU. Digunakan untuk pinning (mengikat vCPU ke CPU fisik tertentu).

Contoh:

<vcpu cpuset="0-3">4</vcpu>

3. dies

Jumlah die per socket dalam topologi CPU (untuk CPU modern dengan arsitektur multi-die).

Contoh:

<cpu>
  <topology sockets='1' dies='2' cores='4' threads='2'/>
</cpu>

4. maxvcpus

Jumlah maksimum vCPU yang dapat diaktifkan (untuk keperluan hotplug). Nilai ini harus ≥ nilai current.

Contoh:

<vcpu current='2' maxvcpus='4'>4</vcpu>

5. sockets

Jumlah socket CPU virtual. Menentukan bagaimana CPU virtual diorganisasi dalam topologi.

6. threads

Jumlah thread per core (misalnya untuk simulasi Hyper-Threading/SMT).

7. vcpu

Elemen utama untuk mengonfigurasi vCPU. Contoh:

<vcpu placement='static' current='2'>4</vcpu>

7. vcpu.cpuset

Mengikat vCPU tertentu ke CPU fisik. Biasanya diatur dalam elemen <cputune>.

Contoh:

<cputune>
  <vcpupin vcpu='0' cpuset='0'/>
</cputune>

8. vcpu.current

Jumlah vCPU yang aktif saat ini (biasanya ≤ `maxvcpus`).

9. vcpu.placement

Strategi penempatan vCPU:  
- `static`: Diketatkan ke CPU fisik (default).  
- `auto`: Biarkan host menentukan penempatan.

10. vcpus

Elemen induk untuk konfigurasi individual vCPU (misalnya untuk *hotplug*).

11. vcpus.vcpu[0-9]*.enabled

Status aktivasi vCPU tertentu (`yes`/`no`). Contoh:  
```xml
<vcpus>
  <vcpu id='0' enabled='yes'/>
</vcpus>
```

12. vcpus.vcpu[0-9]*.hotpluggable

Apakah vCPU dapat di-*hotplug* (ditambahkan/dihapus saat VM berjalan).

13. vcpus.vcpu[0-9]*.id

ID unik vCPU (biasanya angka 0, 1, dst.).

14. vcpus.vcpu[0-9]*.order

Urutan inisialisasi vCPU saat boot (jarang digunakan).

Contoh XML Lengkap:

<domain>
  <vcpu placement='static' current='2' maxvcpus='4'>4</vcpu>
  <cpu>
    <topology sockets='2' cores='2' threads='1' dies='1'/>
  </cpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='0'/>
    <vcpupin vcpu='1' cpuset='1'/>
  </cputune>
  <vcpus>
    <vcpu id='0' enabled='yes' hotpluggable='no'/>
    <vcpu id='1' enabled='yes' hotpluggable='yes'/>
  </vcpus>
</domain>

Catatan:

  • Atribut seperti dies dan vcpus.vcpu[0-9]* memerlukan Libvirt versi terbaru dan dukungan hypervisor (misalnya QEMU ≥ 5.0).
  • Hotplug vCPU harus didukung oleh OS tamu.

CPU

Berikut penjelasan arti dari atribut CPU di libvirt:

1. cache.level

  • Arti: Menentukan level cache CPU (L1, L2, L3) yang dikonfigurasi untuk guest VM.
  • Kegunaan: Digunakan bersama cache.mode untuk mengatur bagaimana cache CPU diekspos ke VM. Misal: level='3' untuk mengatur cache L3.

2. cache.mode

  • Arti: Mengontrol strategi virtualisasi cache CPU.
  • Nilai yang Umum:
    • passthrough: Cache host langsung diakses VM (terbatas pada migrasi).
    • emulate: Cache diemulasikan untuk kompatibilitas.
    • disable: Cache tidak tersedia untuk VM.
  • Contoh: <cache mode='passthrough' level='3'/>.

3. check

  • Arti: Menentukan apakah konfigurasi CPU diverifikasi terhadap kemampuan host.
  • Nilai:
    • none: Tidak ada pengecekan.
    • partial: Pengecekan dasar (default).
    • full: Pengecekan ketat untuk migrasi.

4. disable, forbid, force

  • Konteks: Atribut kebijakan untuk fitur CPU (contoh: <feature policy='disable'/>).
  • Arti:
    • disable: Menonaktifkan fitur CPU di VM.
    • forbid: Host harus tidak memiliki fitur tersebut (jika ada, VM gagal dijalankan).
    • force: Memaksa fitur diaktifkan, meski host tidak mendukung (risiko crash!).

5. match

  • Arti: Menentukan ketelitian pencocokan model CPU host dengan VM.
  • Nilai:
    • minimum: Cocokkan setidaknya fitur dasar.
    • exact: Persis sesuai dengan host (termasuk versi mikro).
    • strict: Cocokkan semua detail CPU (termasuk vendor, topologi).

6. migratable

  • Arti: Menunjukkan apakah konfigurasi CPU aman untuk migrasi live.
  • Nilai: on (default) atau off.
  • Kegunaan: Jika off, konfigurasi mungkin bergantung pada fitur host-spesifik.

7. mode

  • Arti: Strategi virtualisasi CPU secara umum.
  • Nilai:
    • host-passthrough: Ekspos CPU host langsung ke VM (kinerja maksimal, tidak migrasi).
    • host-model: Tiru model CPU host dengan kompatibilitas migrasi.
    • custom: Gunakan model CPU spesifik (diatur via model).

8. model

  • Arti: Nama model CPU yang diemulasikan untuk VM (misal: Intel Core i7).
  • Contoh: <model fallback='allow'>Haswell</model>.

9. model.fallback

  • Arti: Kebijakan jika model CPU tidak didukung host.
  • Nilai:
    • allow: Gunakan model yang kompatibel terdekat (default).
    • forbid: Gagal jika model tidak tersedia.

10. model.vendor_id

  • Arti: Mengganti string vendor CPU yang terlihat VM.
  • Kegunaan: Misal: <vendor_id>GenuineIntel</vendor_id> untuk menyamar sebagai Intel.

Contoh XML Sederhana:

<cpu mode='host-model' match='exact' check='full'>
  <model fallback='forbid'>Haswell</model>
  <feature policy='disable' name='rdrand'/>
  <cache mode='passthrough' level='3'/>
</cpu>

Semua atribut ini memengaruhi kinerja, kompatibilitas, dan kemampuan migrasi VM. Konfigurasi yang salah (misal: force atau host-passthrough) dapat menyebabkan kegagalan migrasi atau crash VM.


NUMA Cell Attributes

NUMA cell (atau node) adalah bagian dari arsitektur CPU dan memori yang memengaruhi kinerja VM. Atribut ini mengatur konfigurasi NUMA untuk VM.

11. numa.cell[0-9]*.cache[0-9]*.associativity

  • Arti: Menentukan asosiativitas cache (cara cache di-mapping ke memori).
  • Contoh: Fully associative, direct-mapped, atau set-associative.

12. numa.cell[0-9]*.cache[0-9]*.level

  • Arti: Level cache (L1, L2, L3) yang dikonfigurasi untuk NUMA cell.
  • Contoh: level='2' untuk cache L2.

13. numa.cell[0-9]*.cache[0-9]*.line.unit

  • Arti: Unit ukuran untuk cache line (misal: bytes).
  • Contoh: <line unit='bytes' value='64'/>.

14. numa.cell[0-9]*.cache[0-9]*.line.value

  • Arti: Ukuran cache line dalam unit yang ditentukan.
  • Contoh: value='64' untuk cache line 64 byte.

15. numa.cell[0-9]*.cache[0-9]*.policy

  • Arti: Kebijakan manajemen cache (misal: write-back, write-through).
  • Contoh: <policy>write-back</policy>.

16. numa.cell[0-9]*.cache[0-9]*.size.unit

  • Arti: Unit ukuran untuk total cache size (misal: KB, MB).
  • Contoh: <size unit='MB' value='8'/>.

17. numa.cell[0-9]*.cache[0-9]*.size.value

  • Arti: Ukuran total cache dalam unit yang ditentukan.
  • Contoh: value='8' untuk cache 8 MB.

18. numa.cell[0-9]*.cpus

  • Arti: Daftar CPU yang termasuk dalam NUMA cell.
  • Contoh: <cpus>0-3</cpus> untuk CPU 0 hingga 3.

19. numa.cell[0-9]*.discard

  • Arti: Menentukan apakah memori NUMA cell dapat di-discard (dibebaskan) saat tidak digunakan.
  • Nilai: yes atau no.

20. numa.cell[0-9]*.distances.sibling[0-9]*.id

  • Arti: ID NUMA cell yang merupakan “sibling” (tetangga) dari cell ini.
  • Contoh: <sibling id='1' value='20'/>.

21. numa.cell[0-9]*.distances.sibling[0-9]*.value

  • Arti: Jarak relatif (latensi atau bandwidth) antara NUMA cell dan sibling-nya.
  • Contoh: value='20' menunjukkan jarak relatif.

22. numa.cell[0-9]*.id

  • Arti: ID unik untuk NUMA cell.
  • Contoh: <cell id='0'>.

23. numa.cell[0-9]*.memAccess

  • Arti: Menentukan mode akses memori untuk NUMA cell.
  • Nilai: shared (default) atau private.

24. numa.cell[0-9]*.memory

  • Arti: Jumlah memori yang dialokasikan untuk NUMA cell.
  • Contoh: <memory unit='MB'>4096</memory> untuk 4 GB.

25. numa.cell[0-9]*.unit

  • Arti: Unit ukuran untuk memori NUMA cell (misal: KB, MB, GB).
  • Contoh: <memory unit='GB'>4</memory>.

NUMA Interconnect Attributes

Atribut ini mengatur interkoneksi antara NUMA cells, seperti bandwidth dan latensi.

26. numa.interconnects.bandwidth[0-9]*.cache

  • Arti: Menentukan apakah bandwidth interkoneksi di-cache.
  • Nilai: yes atau no.

27. numa.interconnects.bandwidth[0-9]*.initiator

  • Arti: ID NUMA cell yang memulai transfer data.
  • Contoh: <initiator>0</initiator>.

28. numa.interconnects.bandwidth[0-9]*.target

  • Arti: ID NUMA cell yang menjadi target transfer data.
  • Contoh: <target>1</target>.

29. numa.interconnects.bandwidth[0-9]*.type

  • Arti: Jenis interkoneksi (misal: QPI, UPI, PCIe).
  • Contoh: <type>QPI</type>.

30. numa.interconnects.bandwidth[0-9]*.unit

  • Arti: Unit ukuran bandwidth (misal: GB/s).
  • Contoh: <unit>GB/s</unit>.

31. numa.interconnects.bandwidth[0-9]*.value

  • Arti: Nilai bandwidth dalam unit yang ditentukan.
  • Contoh: <value>20</value> untuk 20 GB/s.

32. numa.interconnects.latency[0-9]*.cache

  • Arti: Menentukan apakah latensi interkoneksi di-cache.
  • Nilai: yes atau no.

33. numa.interconnects.latency[0-9]*.initiator

  • Arti: ID NUMA cell yang memulai transfer data.
  • Contoh: <initiator>0</initiator>.

34. numa.interconnects.latency[0-9]*.target

  • Arti: ID NUMA cell yang menjadi target transfer data.
  • Contoh: <target>1</target>.

35. numa.interconnects.latency[0-9]*.type

  • Arti: Jenis interkoneksi (misal: QPI, UPI, PCIe).
  • Contoh: <type>QPI</type>.

36. numa.interconnects.latency[0-9]*.unit

  • Arti: Unit ukuran latensi (misal: ns untuk nanosecond).
  • Contoh: <unit>ns</unit>.

37. numa.interconnects.latency[0-9]*.value

  • Arti: Nilai latensi dalam unit yang ditentukan.
  • Contoh: <value>50</value> untuk 50 ns.

Contoh XML NUMA Configuration

<cpu>
  <numa>
    <cell id='0' cpus='0-3' memory='4096' unit='MB' memAccess='shared'>
      <distances>
        <sibling id='1' value='20'/>
      </distances>
      <cache level='1' associativity='direct' size='64' unit='KB'/>
    </cell>
    <cell id='1' cpus='4-7' memory='4096' unit='MB' memAccess='shared'>
      <distances>
        <sibling id='0' value='20'/>
      </distances>
    </cell>
  </numa>
  <interconnects>
    <bandwidth type='QPI' initiator='0' target='1' value='20' unit='GB/s'/>
    <latency type='QPI' initiator='0' target='1' value='50' unit='ns'/>
  </interconnects>
</cpu>

Atribut NUMA ini memungkinkan Anda mengoptimalkan kinerja VM dengan mengatur alokasi CPU, memori, cache, dan interkoneksi antar-NUMA cells.


38. optional

  • Arti: Menunjukkan bahwa fitur CPU bersifat opsional. Jika fitur tidak tersedia di host, VM tetap dapat berjalan.
  • Konteks: Digunakan dalam elemen <feature> untuk menentukan kebijakan fitur CPU.
  • Contoh:
    <feature policy='optional' name='avx'/>
    
    Artinya, fitur AVX opsional dan tidak wajib ada di host.

39. require

  • Arti: Menunjukkan bahwa fitur CPU wajib ada di host. Jika tidak tersedia, VM tidak akan bisa dijalankan.
  • Konteks: Digunakan dalam elemen <feature> untuk menentukan kebijakan fitur CPU.
  • Contoh:
    <feature policy='require' name='sse4.2'/>
    
    Artinya, fitur SSE4.2 harus ada di host, atau VM tidak akan berjalan.

40. secure

  • Arti: Menunjukkan bahwa fitur CPU terkait dengan keamanan (misal: Intel SGX atau AMD SEV).
  • Konteks: Digunakan untuk memastikan fitur keamanan CPU diaktifkan.
  • Contoh:
    <feature policy='require' name='sev' secure='yes'/>
    
    Artinya, fitur AMD SEV harus diaktifkan dan aman.

41. topology.cores

  • Arti: Menentukan jumlah core per socket dalam topologi CPU.
  • Konteks: Digunakan dalam elemen <topology> untuk mengonfigurasi virtual CPU topology.
  • Contoh:
    <topology sockets='2' cores='4' threads='2'/>
    
    Artinya, setiap socket memiliki 4 core.

42. topology.dies

  • Arti: Menentukan jumlah dies per socket dalam topologi CPU.
  • Konteks: Digunakan dalam elemen <topology> untuk arsitektur CPU modern yang memiliki multiple dies per socket.
  • Contoh:
    <topology sockets='2' dies='2' cores='4' threads='2'/>
    
    Artinya, setiap socket memiliki 2 dies, dan setiap die memiliki 4 core.

43. topology.sockets

  • Arti: Menentukan jumlah socket CPU dalam topologi virtual.
  • Konteks: Digunakan dalam elemen <topology> untuk mengonfigurasi virtual CPU topology.
  • Contoh:
    <topology sockets='2' cores='4' threads='2'/>
    
    Artinya, VM memiliki 2 socket CPU.

44. topology.threads

  • Arti: Menentukan jumlah thread per core dalam topologi CPU.
  • Konteks: Digunakan dalam elemen <topology> untuk mengonfigurasi virtual CPU topology.
  • Contoh:
    <topology sockets='2' cores='4' threads='2'/>
    
    Artinya, setiap core memiliki 2 thread (Hyper-Threading).

45. vendor

  • Arti: Menentukan vendor CPU (misal: Intel, AMD).
  • Konteks: Digunakan dalam elemen <cpu> untuk menentukan vendor CPU yang diemulasikan.
  • Contoh:
    <cpu mode='host-model'>
      <vendor>Intel</vendor>
      <model>Haswell</model>
    </cpu>
    
    Artinya, VM akan menggunakan model CPU Intel Haswell.

OS_VARIANT

Berikut adalah penjelasan lebih rinci tentang atribut OS_VARIANT di libvirt, beserta contoh penggunaannya:

1. detect

  • Arti: Libvirt akan mencoba mendeteksi varian sistem operasi secara otomatis berdasarkan media instalasi (ISO) atau konfigurasi yang diberikan. Ini berguna jika Anda tidak yakin varian OS yang tepat atau ingin libvirt memilih yang paling sesuai.
  • Contoh Penggunaan:
    <os>
      <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
      <boot dev='cdrom'/>
      <os_variant detect='yes'/>
    </os>
    
    Dalam contoh ini, libvirt akan mencoba mendeteksi varian OS dari media instalasi yang dimasukkan ke dalam cdrom.

2. id

  • Arti: id adalah identifier unik yang merujuk pada varian OS tertentu. Ini biasanya berupa string yang sudah didefinisikan dalam database libvirt.
  • Contoh Penggunaan:
    <os>
      <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
      <boot dev='hd'/>
      <os_variant id='rhel8'/>
    </os>
    
    Di sini, id='rhel8' menunjukkan bahwa varian OS yang digunakan adalah Red Hat Enterprise Linux 8.

3. name

  • Arti: name adalah nama lengkap atau deskriptif dari varian OS. Ini lebih mudah dibaca dan dipahami oleh manusia.
  • Contoh Penggunaan:
    <os>
      <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
      <boot dev='hd'/>
      <os_variant name='Ubuntu 20.04 LTS'/>
    </os>
    
    Dalam contoh ini, name='Ubuntu 20.04 LTS' menunjukkan bahwa varian OS yang digunakan adalah Ubuntu 20.04 LTS.

4. require

  • Arti: require digunakan untuk memastikan bahwa varian OS tertentu tersedia atau memenuhi persyaratan sebelum proses instalasi atau konfigurasi VM dilanjutkan.
  • Contoh Penggunaan:
    <os>
      <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
      <boot dev='hd'/>
      <os_variant require='rhel8'/>
    </os>
    
    Di sini, require='rhel8' memastikan bahwa varian OS Red Hat Enterprise Linux 8 tersedia sebelum VM dikonfigurasi.

5. short-id

  • Arti: short-id adalah versi singkat dari id yang digunakan untuk merujuk pada varian OS. Ini biasanya lebih pendek dan lebih mudah digunakan dalam skrip atau konfigurasi otomatis.

DISK

Berikut penjelasan mengenai atribut disk pada libvirt:

1. alias.name

  • Arti: Memberikan nama unik dan ramah-pengguna untuk perangkat disk di dalam domain VM.
  • Fungsi:
    • Memudahkan identifikasi disk saat menggunakan perintah CLI (seperti virsh), alat debugging, atau API.
    • Contoh: ua-myhdd untuk merujuk ke disk tertentu.
  • XML Example:
    <alias name="ua-myhdd"/>
    

2. backing_format

  • Arti: Format file/image yang digunakan sebagai backing store (basis) untuk disk ini.
  • Fungsi:
    • Menentukan jenis format (seperti qcow2, raw) dari file/image yang menjadi dasar disk saat menggunakan snapshot atau thin provisioning.
    • Libvirt memerlukan informasi ini untuk memastikan rantai backing image terbaca dengan benar.
  • XML Example:
    <backingStore type="file">
      <format type="qcow2"/> <!-- backing_format -->
      <source file="/base_image.qcow2"/>
    </backingStore>
    

3. backing_store

  • Arti: Lokasi path atau sumber dari backing image (image dasar) yang digunakan oleh disk ini.
  • Fungsi:
    • Menunjukkan file/image yang menjadi basis untuk disk saat ini (misalnya, dalam skenario snapshot).
    • Contoh: Jika disk saat ini adalah overlay, backing_store merujuk ke image induknya.
  • XML Example:
    <backingStore type="file">
      <source file="/base_image.qcow2"/> <!-- backing_store -->
    </backingStore>
    

4. blockio.logical_block_size

  • Arti: Ukuran blok logis (dalam byte) yang dilihat oleh mesin virtual (VM).
  • Fungsi:
    • Menentukan ukuran blok yang digunakan oleh sistem operasi guest untuk operasi I/O (misalnya, 512 byte atau 4096 byte).
    • Berguna untuk kompatibilitas atau optimasi performa (misalnya, menyamakan dengan sistem file guest).
  • XML Example:
    <blockio logical_block_size="512"/>
    

5. blockio.physical_block_size

  • Arti: Ukuran blok fisik (dalam byte) pada media penyimpanan host.
  • Fungsi:
    • Menunjukkan ukuran blok sebenarnya dari penyimpanan fisik (misalnya, 4K untuk SSD modern).
    • Jika diatur, libvirt/QEMU akan mencocokkannya dengan penyimpanan host untuk optimalisasi.
  • XML Example:
    <blockio physical_block_size="4096"/>
    

6. boot.loadparm

  • Arti: Parameter opsional yang diteruskan ke bootloader atau firmware saat booting.
  • Fungsi:
    • Umumnya digunakan untuk mengatur parameter boot spesifik (misalnya, pilih entri di menu GRUB, atau konfigurasi kernel).
    • Pada sistem IBM S390, ini bisa menentukan parameter IPL (Initial Program Loader).
  • XML Example:
    <boot loadparm="kernel=linux"/>
    

7. boot.order

  • Arti: Urutan prioritas boot untuk disk ini dibandingkan perangkat lain (misalnya, CD-ROM, NIC).
  • Fungsi:
    • Menentukan urutan boot: VM akan mencoba boot dari perangkat dengan nilai order terendah terlebih dahulu.
    • Contoh: Jika disk diatur order='1', VM akan mencoba boot dari disk ini sebelum perangkat dengan order='2'.
  • XML Example:
    <boot order="1"/>
    

8. driver.ats

  • Arti: Mengaktifkan dukungan Address Translation Services (ATS) untuk perangkat disk.
  • Fungsi:
    • Digunakan dalam lingkungan virtualisasi dengan perangkat PCIe yang mendukung ATS untuk meningkatkan performa I/O dengan mengurangi overhead translasi alamat.
    • Biasanya digunakan dengan SR-IOV atau perangkat passthrough.
  • XML Example:
    <driver ats="on"/>
    

9. driver.cache

  • Arti: Mengatur mode caching untuk operasi I/O disk.
  • Fungsi:
    • Memungkinkan pengaturan caching seperti none, writethrough, writeback, directsync, atau unsafe.
    • Contoh:
      • writethrough: Menjamin data ditulis ke penyimpanan fisik sebelum operasi dianggap selesai.
      • writeback: Menyimpan data di cache host terlebih dahulu, meningkatkan performa tetapi berisiko kehilangan data jika host crash.
  • XML Example:
    <driver cache="writeback"/>
    

10. driver.copy_on_read

  • Arti: Mengaktifkan atau menonaktifkan fitur copy-on-read.
  • Fungsi:
    • Jika diaktifkan (copy_on_read="on"), data yang dibaca dari backing image akan disalin ke disk utama (overlay).
    • Berguna untuk menghindari pembacaan berulang dari backing image yang lambat.
  • XML Example:
    <driver copy_on_read="on"/>
    

11. driver.detect_zeroes

  • Arti: Mengontrol deteksi dan penanganan blok data yang berisi nol (zero blocks).
  • Fungsi:
    • Jika diatur ke on, blok nol akan dideteksi dan ditulis secara efisien (misalnya, sebagai lubang di file sparse).
    • Opsi: off, on, atau unmap (untuk melepaskan blok nol).
  • XML Example:
    <driver detect_zeroes="on"/>
    

12. driver.discard

  • Arti: Mengaktifkan dukungan untuk perintah TRIM/DISCARD.
  • Fungsi:
    • Memungkinkan sistem operasi guest untuk memberi tahu host tentang blok data yang tidak lagi digunakan, sehingga host dapat mengoptimalkan penyimpanan.
    • Opsi: ignore (default), unmap (melepaskan blok yang tidak digunakan).
  • XML Example:
    <driver discard="unmap"/>
    

13. driver.error_policy

  • Arti: Menentukan kebijakan penanganan kesalahan I/O.
  • Fungsi:
    • Opsi:
      • stop: Menghentikan VM jika terjadi kesalahan I/O.
      • report: Melaporkan kesalahan ke guest tanpa menghentikan VM.
      • ignore: Mengabaikan kesalahan I/O.
    • Berguna untuk mengontrol perilaku VM saat terjadi masalah disk.
  • XML Example:
    <driver error_policy="stop"/>
    

14. driver.io

  • Arti: Mengatur mode I/O untuk disk.
  • Fungsi:
    • Opsi:
      • native: Menggunakan mekanisme I/O default host.
      • threads: Menggunakan thread terpisah untuk operasi I/O.
    • Berguna untuk mengoptimalkan performa I/O berdasarkan beban kerja.
  • Kriteria Pemilihan:
    • Gunakan io="native" Jika:
      • Kernel host modern (≥ 2.6.32) dengan dukungan AIO yang baik (misal: Linux ≥ 5.1 dengan io_uring).
      • Storage backend mendukung AIO. Contoh: raw block device (LVM, iSCSI), filesystem yang mendukung O_DIRECT (XFS, ext4), atau format disk qcow2 dengan cache mode none/directsync.
      • Workload I/O intensif. Banyak operasi I/O paralel (misal: database, VM dengan disk aktif).
    • Gunakan io="threads" Jika:
      • Kernel host lama (< 2.6.32) atau ada bug pada AIO kernel.
      • Storage backend tidak mendukung AIO. Contoh: filesystem jaringan (NFS versi lama), format disk dengan cache mode writeback/writethrough, atau filesystem yang tidak kompatibel dengan O_DIRECT.
      • Workload I/O kecil atau terfragmentasi. Threads lebih toleran terhadap operasi I/O acak berskala kecil.
  • XML Example:
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" cache="none" io="native"/>  <!-- atau io="threads" -->
      <source file="/path/to/disk.qcow2"/>
      <target dev="vda" bus="virtio"/>
    </disk>
    

15. driver.iommu

  • Arti: Mengaktifkan dukungan IOMMU (Input-Output Memory Management Unit) untuk perangkat disk.
  • Fungsi:
    • Digunakan untuk isolasi dan manajemen memori yang lebih aman, terutama dalam konfigurasi passthrough.
  • XML Example:
    <driver iommu="on"/>
    

16. driver.iothread

  • Arti: Mengaitkan disk dengan iothread tertentu.
  • Fungsi:
    • Memungkinkan operasi I/O disk berjalan di thread terpisah, meningkatkan performa dengan mengurangi kontensi CPU.
    • Berguna untuk VM dengan beban I/O tinggi.
    • Hanya tersedia untuk perangkat virtio modern.
  • XML Example:
    <domain>
    ...
    <iothreads>4</iothreads>
    ...
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" copy_on_read="on" iothread="1"/>
      <source file="/var/libvirt/images/rocky-mariadb.vmdk"/>
      <target dev="vda" bus="virtio" rotation_rate="1"/>
    </disk>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" copy_on_read="on" iothread="2"/>
      <source file="/var/libvirt/images/rocky-mariadb-1.vmdk"/>
      <target dev="vdb" bus="virtio" rotation_rate="1"/>
    </disk>
    ...
    

17. driver.name

  • Arti: Menentukan driver backend yang digunakan untuk disk.
  • Fungsi:
    • Opsi umum: qemu (default), vhost-user, atau driver khusus lainnya.
    • Contoh: vhost-user digunakan untuk akses disk melalui proses terpisah (misalnya, dengan SPDK).
  • XML Example:
    <driver name="qemu"/>
    

18. driver.packed

  • Arti: Mengaktifkan dukungan untuk packed virtqueues (hanya untuk perangkat virtio).
  • Fungsi:
    • Meningkatkan efisiensi dengan mengurangi overhead komunikasi antara guest dan host.
    • Hanya tersedia untuk perangkat virtio modern.
  • XML Example:
    <driver packed="on"/>
    

19. driver.page_per_vq

  • Arti: Mengaktifkan fitur page-per-virtqueue untuk perangkat virtio.
  • Fungsi:
    • Mengalokasikan memori terpisah untuk setiap virtqueue, meningkatkan isolasi dan performa.
  • XML Example:
    <driver page_per_vq="on"/>
    

20. driver.queues

  • Arti: Menentukan jumlah antrian (queues) untuk perangkat disk.
  • Fungsi:
    • Meningkatkan paralelisme dan performa I/O dengan menggunakan beberapa antrian.
    • Berguna untuk beban kerja I/O intensif.
  • XML Example:
    <driver queues="4"/>
    

21. driver.type

  • Arti: Menentukan format disk yang digunakan.
  • Fungsi:
    • Opsi umum: raw, qcow2, vmdk, vhd, dll.
    • Menentukan format file/image yang digunakan untuk disk.
  • XML Example:
    <driver type="qcow2"/>
    

22. geometry.cyls

  • Arti: Menentukan jumlah siklinder (cylinders) pada disk.
  • Fungsi:
    • Digunakan untuk menentukan geometri disk virtual (C/H/S: Cylinders/Heads/Sectors).
    • Biasanya diperlukan untuk kompatibilitas dengan sistem operasi lama yang bergantung pada geometri disk.
  • XML Example:
    <geometry cyls="16383"/>
    

23. geometry.heads

  • Arti: Menentukan jumlah head pada disk.
  • Fungsi:
    • Bagian dari geometri disk (C/H/S).
    • Misalnya, nilai umum adalah 16 heads.
  • XML Example:
    <geometry heads="16"/>
    

24. geometry.secs

  • Arti: Menentukan jumlah sektor (sectors) per track pada disk.
  • Fungsi:
    • Bagian dari geometri disk (C/H/S).
    • Misalnya, nilai umum adalah 63 sektor per track.
  • XML Example:
    <geometry secs="63"/>
    

25. geometry.trans

  • Arti: Menentukan jenis translasi geometri disk.
  • Fungsi:
    • Digunakan untuk menentukan bagaimana geometri disk diterjemahkan ke alamat fisik.
    • Opsi: none, lba, auto.
    • Contoh: lba (Logical Block Addressing) adalah metode modern untuk mengakses disk.
  • XML Example:
    <geometry trans="lba"/>
    

26. iotune.read_bytes_sec

  • Arti: Membatasi kecepatan baca (read) dalam byte per detik.
  • Fungsi:
    • Mengatur batas kecepatan baca untuk disk, berguna untuk membatasi penggunaan bandwidth.
    • Contoh: 10485760 untuk membatasi kecepatan baca hingga 10 MB/s.
  • XML Example:
    <iotune>
      <read_bytes_sec>10485760</read_bytes_sec>
    </iotune>
    

27. iotune.read_iops_sec

  • Arti: Membatasi jumlah operasi baca (read) dalam IOPS (Input/Output Operations Per Second).
  • Fungsi:
    • Mengatur batas jumlah operasi baca per detik.
    • Contoh: 1000 untuk membatasi hingga 1000 operasi baca per detik.
  • XML Example:
    <iotune>
      <read_iops_sec>1000</read_iops_sec>
    </iotune>
    

28. iotune.total_bytes_sec

  • Arti: Membatasi kecepatan total (baca + tulis) dalam byte per detik.
  • Fungsi:
    • Mengatur batas kecepatan total untuk semua operasi I/O (baca dan tulis).
    • Contoh: 20971520 untuk membatasi kecepatan total hingga 20 MB/s.
  • XML Example:
    <iotune>
      <total_bytes_sec>20971520</total_bytes_sec>
    </iotune>
    

29. iotune.total_iops_sec

  • Arti: Membatasi jumlah total operasi I/O (baca + tulis) dalam IOPS.
  • Fungsi:
    • Mengatur batas jumlah total operasi I/O per detik.
    • Contoh: 2000 untuk membatasi hingga 2000 operasi I/O per detik.
  • XML Example:
    <iotune>
      <total_iops_sec>2000</total_iops_sec>
    </iotune>
    

30. iotune.write_bytes_sec

  • Arti: Membatasi kecepatan tulis (write) dalam byte per detik.
  • Fungsi:
    • Mengatur batas kecepatan tulis untuk disk.
    • Contoh: 10485760 untuk membatasi kecepatan tulis hingga 10 MB/s.
  • XML Example:
    <iotune>
      <write_bytes_sec>10485760</write_bytes_sec>
    </iotune>
    

31. iotune.write_iops_sec

  • Arti: Membatasi jumlah operasi tulis (write) dalam IOPS.
  • Fungsi:
    • Mengatur batas jumlah operasi tulis per detik.
    • Contoh: 1000 untuk membatasi hingga 1000 operasi tulis per detik.
  • XML Example:
    <iotune>
      <write_iops_sec>1000</write_iops_sec>
    </iotune>
    

Berikut penjelasan mengenai atribut disk pada libvirt yang berkaitan dengan konfigurasi umum dan manajemen disk:


32. path

  • Arti: Menentukan jalur (path) ke file atau perangkat fisik yang digunakan sebagai disk.
  • Fungsi:
    • Menunjukkan lokasi file image (misalnya, /var/lib/libvirt/images/disk.qcow2) atau perangkat blok (misalnya, /dev/sdb).
    • Wajib diisi untuk disk tipe file atau block.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/> <!-- path -->
    </disk>
    

33. pool

  • Arti: Menentukan pool penyimpanan (storage pool) yang digunakan untuk disk.
  • Fungsi:
    • Mengaitkan disk dengan pool penyimpanan yang telah didefinisikan di libvirt.
    • Libvirt akan mengelola lokasi file disk secara otomatis berdasarkan pool yang ditentukan.
  • XML Example:
    <disk type="volume" device="disk">
      <source pool="default" volume="disk.qcow2"/> <!-- pool -->
    </disk>
    

34. rawio

  • Arti: Mengaktifkan akses I/O mentah (raw) ke perangkat disk.
  • Fungsi:
    • Digunakan untuk perangkat blok yang memerlukan akses langsung (misalnya, perangkat SCSI atau disk passthrough).
    • Membutuhkan izin khusus (biasanya akses root).
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb"/>
      <rawio/> <!-- rawio -->
    </disk>
    

35. readonly

  • Arti: Menandai disk sebagai hanya baca (read-only).
  • Fungsi:
    • Mencegah VM menulis ke disk.
    • Berguna untuk disk yang berisi data statis atau template.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
      <readonly/> <!-- readonly -->
    </disk>
    

36. serial

  • Arti: Menentukan nomor seri (serial number) untuk disk.
  • Fungsi:
    • Memberikan identifikasi unik untuk disk, yang dapat dilihat oleh sistem operasi guest.
    • Berguna untuk skenario seperti multipath atau identifikasi disk di dalam guest.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
      <serial>1234-ABCD</serial> <!-- serial -->
    </disk>
    

37. sgio

  • Arti: Mengontrol mode SCSI Generic I/O (SG_IO) untuk perangkat disk.
  • Fungsi:
    • Opsi: filtered (default) atau unfiltered.
    • unfiltered memungkinkan akses langsung ke perintah SCSI tingkat rendah, tetapi membutuhkan izin khusus.
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb"/>
      <sgio>unfiltered</sgio> <!-- sgio -->
    </disk>
    

38. shareable

  • Arti: Menandai disk sebagai dapat dibagikan (shareable).
  • Fungsi:
    • Memungkinkan disk diakses oleh lebih dari satu VM secara bersamaan.
    • Berguna untuk skenario seperti disk bersama (shared storage) atau clustering.
    • Peringatan: Harus digunakan dengan hati-hati untuk menghindari korupsi data.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/shared_disk.qcow2"/>
      <shareable/> <!-- shareable -->
    </disk>
    

39. size

  • Arti: Menentukan ukuran disk dalam byte.
  • Fungsi:
    • Digunakan saat membuat disk baru untuk menentukan ukurannya.
    • Contoh: 10737418240 untuk disk berukuran 10 GB.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
      <capacity unit="bytes">10737418240</capacity> <!-- size -->
    </disk>
    

40. snapshot

  • Arti: Menentukan perilaku disk saat snapshot diambil.
  • Fungsi:
    • Opsi:
      • internal: Snapshot disimpan di dalam file image disk.
      • external: Snapshot disimpan di file terpisah.
      • no: Disk tidak mendukung snapshot.
    • Berguna untuk mengontrol apakah disk dapat di-snapshot atau tidak.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
      <snapshot type="internal"/> <!-- snapshot -->
    </disk>
    

41. source.dev

  • Arti: Menentukan perangkat blok fisik (block device) sebagai sumber disk.
  • Fungsi:
    • Digunakan untuk mengaitkan disk dengan perangkat blok di host (misalnya, /dev/sdb).
    • Umumnya digunakan untuk tipe disk block.
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb"/> <!-- source.dev -->
    </disk>
    

42. source.dir

  • Arti: Menentukan direktori sebagai sumber disk.
  • Fungsi:
    • Digunakan untuk tipe disk dir, di mana direktori di-host dianggap sebagai disk.
    • Contoh: Direktori berisi file-file kecil yang dianggap sebagai blok disk.
  • XML Example:
    <disk type="dir" device="disk">
      <source dir="/path/to/directory"/> <!-- source.dir -->
    </disk>
    

43. source.file

  • Arti: Menentukan file sebagai sumber disk.
  • Fungsi:
    • Digunakan untuk tipe disk file, di mana file image (misalnya, qcow2, raw) digunakan sebagai disk.
    • Contoh: /var/lib/libvirt/images/disk.qcow2.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/> <!-- source.file -->
    </disk>
    

44. source.host[0-9]*.name

  • Arti: Menentukan nama host untuk sumber disk berbasis jaringan.
  • Fungsi:
    • Digunakan untuk disk yang diakses melalui jaringan (misalnya, NBD, iSCSI, atau Gluster).
    • Contoh: server.example.com.
  • XML Example:
    <disk type="network" device="disk">
      <source protocol="nbd">
        <host name="server.example.com"/> <!-- source.host.name -->
      </source>
    </disk>
    

45. source.host[0-9]*.port

  • Arti: Menentukan port untuk sumber disk berbasis jaringan.
  • Fungsi:
    • Menentukan port yang digunakan untuk mengakses sumber disk (misalnya, port 10809 untuk NBD).
  • XML Example:
    <disk type="network" device="disk">
      <source protocol="nbd">
        <host name="server.example.com" port="10809"/> <!-- source.host.port -->
      </source>
    </disk>
    

46. source.host[0-9]*.socket

  • Arti: Menentukan socket untuk sumber disk berbasis jaringan.
  • Fungsi:
    • Digunakan untuk koneksi berbasis socket (misalnya, Unix domain socket).
  • XML Example:
    <disk type="network" device="disk">
      <source protocol="nbd">
        <host socket="/path/to/socket"/> <!-- source.host.socket -->
      </source>
    </disk>
    

47. source.host[0-9]*.transport

  • Arti: Menentukan jenis transport untuk sumber disk berbasis jaringan.
  • Fungsi:
    • Opsi: tcp, rdma, atau unix (untuk socket).
    • Contoh: tcp untuk koneksi jaringan biasa.
  • XML Example:
    <disk type="network" device="disk">
      <source protocol="nbd">
        <host name="server.example.com" transport="tcp"/> <!-- source.host.transport -->
      </source>
    </disk>
    

48. source.managed

  • Arti: Menentukan apakah sumber disk dikelola oleh libvirt.
  • Fungsi:
    • Jika yes, libvirt akan mengelola sumber disk (misalnya, membuat atau menghapus file image).
    • Jika no, pengguna bertanggung jawab untuk mengelola sumber disk.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2" managed="yes"/> <!-- source.managed -->
    </disk>
    

49. source.name

  • Arti: Menentukan nama sumber disk.
  • Fungsi:
    • Digunakan untuk sumber disk tertentu (misalnya, volume di pool penyimpanan atau LUN di iSCSI).
  • XML Example:
    <disk type="volume" device="disk">
      <source pool="default" volume="disk.qcow2"/> <!-- source.name -->
    </disk>
    

50. source.namespace

  • Arti: Menentukan namespace untuk sumber disk berbasis NVMe.
  • Fungsi:
    • Digunakan untuk mengakses namespace tertentu di perangkat NVMe.
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/nvme0n1" namespace="1"/> <!-- source.namespace -->
    </disk>
    

51. source.pool

  • Arti: Menentukan pool penyimpanan (storage pool) untuk sumber disk.
  • Fungsi:
    • Digunakan untuk mengaitkan disk dengan pool penyimpanan yang telah didefinisikan di libvirt.
  • XML Example:
    <disk type="volume" device="disk">
      <source pool="default" volume="disk.qcow2"/> <!-- source.pool -->
    </disk>
    

52. source.protocol

  • Arti: Menentukan protokol untuk sumber disk berbasis jaringan.
  • Fungsi:
    • Opsi: nbd, rbd, gluster, iscsi, http, dll.
    • Contoh: rbd untuk disk yang diakses melalui Ceph RBD.
  • XML Example:
    <disk type="network" device="disk">
      <source protocol="rbd"/> <!-- source.protocol -->
    </disk>
    

53. source.reservations.managed

  • Arti: Menentukan apakah reservasi sumber disk dikelola oleh libvirt.
  • Fungsi:
    • Jika yes, libvirt akan mengelola reservasi sumber disk.
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb">
        <reservations managed="yes"/> <!-- source.reservations.managed -->
      </source>
    </disk>
    

54. source.reservations.source.mode

  • Arti: Menentukan mode reservasi untuk sumber disk.
  • Fungsi:
    • Opsi: shared atau exclusive.
    • Contoh: exclusive untuk memastikan hanya satu VM yang dapat mengakses disk.
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb">
        <reservations>
          <source mode="exclusive"/> <!-- source.reservations.source.mode -->
        </reservations>
      </source>
    </disk>
    

55. source.reservations.source.path

  • Arti: Menentukan path untuk reservasi sumber disk.
  • Fungsi:
    • Digunakan untuk menentukan lokasi reservasi (misalnya, file lock).
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb">
        <reservations>
          <source path="/path/to/lock"/> <!-- source.reservations.source.path -->
        </reservations>
      </source>
    </disk>
    

56. source.reservations.source.type

  • Arti: Menentukan jenis reservasi untuk sumber disk.
  • Fungsi:
    • Opsi: unix, tcp, dll.
    • Contoh: unix untuk reservasi berbasis Unix domain socket.
  • XML Example:
    <disk type="block" device="disk">
      <source dev="/dev/sdb">
        <reservations>
          <source type="unix"/> <!-- source.reservations.source.type -->
        </reservations>
      </source>
    </disk>
    

57. source.seclabel[0-9]*.label

  • Arti: Menentukan label keamanan (SELinux atau AppArmor) untuk sumber disk.
  • Fungsi:
    • Digunakan untuk menerapkan kebijakan keamanan pada sumber disk.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2">
        <seclabel model="selinux" label="system_u:object_r:svirt_image_t:s0"/> <!-- source.seclabel.label -->
      </source>
    </disk>
    

58. source.seclabel[0-9]*.model

  • Arti: Menentukan model keamanan (SELinux, AppArmor, dll.) untuk sumber disk.
  • Fungsi:
    • Contoh: selinux untuk menggunakan model SELinux.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2">
        <seclabel model="selinux"/> <!-- source.seclabel.model -->
      </source>
    </disk>
    

59. source.seclabel[0-9]*.relabel

  • Arti: Menentukan apakah label keamanan harus diterapkan ulang (relabel) pada sumber disk.
  • Fungsi:
    • Jika yes, label keamanan akan diterapkan ulang saat VM dijalankan.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2">
        <seclabel model="selinux" relabel="yes"/> <!-- source.seclabel.relabel -->
      </source>
    </disk>
    

60. source.startupPolicy

  • Arti: Menentukan kebijakan saat startup jika sumber disk tidak tersedia.
  • Fungsi:
    • Opsi: mandatory (gagal jika sumber tidak ada), requisite (gagal jika sumber tidak ada, tetapi tidak memblokir), optional (lanjut tanpa sumber).
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2" startupPolicy="optional"/> <!-- source.startupPolicy -->
    </disk>
    

61. source.type

  • Arti: Menentukan jenis sumber disk.
  • Fungsi:
    • Opsi: file, block, network, volume, dir, dll.
    • Contoh: file untuk disk berbasis file image.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/> <!-- source.type -->
    </disk>
    

Berikut penjelasan mengenai atribut disk pada libvirt yang berkaitan dengan konfigurasi target, tipe, dan properti tambahan:


62. sparse

  • Arti: Menentukan apakah file image disk harus dibuat sebagai sparse file.
  • Fungsi:
    • Jika yes, file image akan menggunakan alokasi sparse (hanya mengalokasikan ruang untuk data yang benar-benar ditulis).
    • Berguna untuk menghemat ruang penyimpanan.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
      <sparse>yes</sparse> <!-- sparse -->
    </disk>
    

63. target.bus

  • Arti: Menentukan jenis bus yang digunakan untuk menghubungkan disk ke VM.
  • Fungsi:
    • Opsi: ide, scsi, virtio, usb, sata, xen, dll.
    • Contoh: virtio untuk performa optimal pada kebanyakan kasus.
  • XML Example:
    <disk type="file" device="disk">
      <target dev="vda" bus="virtio"/> <!-- target.bus -->
    </disk>
    

64. target.dev

  • Arti: Menentukan nama perangkat disk di dalam VM.
  • Fungsi:
    • Contoh: vda untuk disk pertama di bus virtio, atau hdb untuk disk kedua di bus ide.
    • Nama ini akan terlihat oleh sistem operasi guest.
  • XML Example:
    <disk type="file" device="disk">
      <target dev="vda"/> <!-- target.dev -->
    </disk>
    

65. target.removable

  • Arti: Menentukan apakah disk dianggap sebagai perangkat removable (dapat dilepas) oleh VM.
  • Fungsi:
    • Jika yes, sistem operasi guest akan memperlakukan disk sebagai perangkat yang dapat dilepas (misalnya, USB drive).
  • XML Example:
    <disk type="file" device="disk">
      <target dev="sda" removable="yes"/> <!-- target.removable -->
    </disk>
    

66. target.rotation_rate

  • Arti: Menentukan kecepatan rotasi (rotation rate) untuk disk, dalam RPM (Rotations Per Minute).
  • Fungsi:
    • Berguna untuk mensimulasikan disk HDD atau SSD di dalam VM.
    • Contoh: 5400 untuk HDD lambat, atau 1 untuk SSD (tidak berputar).
  • XML Example:
    <disk type="file" device="disk">
      <target dev="vda" rotation_rate="5400"/> <!-- target.rotation_rate -->
    </disk>
    

67. transient

  • Arti: Menentukan apakah disk bersifat transient (sementara).
  • Fungsi:
    • Jika yes, disk akan dihapus secara otomatis saat VM dimatikan.
    • Berguna untuk disk sementara yang hanya diperlukan selama VM berjalan.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/temp_disk.qcow2"/>
      <transient/> <!-- transient -->
    </disk>
    

68. transient.shareBacking

  • Arti: Menentukan apakah disk transient dapat berbagi backing store dengan disk lain.
  • Fungsi:
    • Jika yes, disk transient dapat menggunakan backing store yang sama dengan disk lain.
    • Berguna untuk menghemat ruang penyimpanan.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/temp_disk.qcow2"/>
      <transient shareBacking="yes"/> <!-- transient.shareBacking -->
    </disk>
    

69. type

  • Arti: Menentukan jenis disk.
  • Fungsi:
    • Opsi: file (file image), block (perangkat blok), network (disk berbasis jaringan), volume (volume di pool penyimpanan), dir (direktori), dll.
    • Contoh: file untuk disk berbasis file image.
  • XML Example:
    <disk type="file" device="disk"> <!-- type -->
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
    </disk>
    

70. vol

  • Arti: Menentukan volume di pool penyimpanan sebagai sumber disk.
  • Fungsi:
    • Digunakan untuk mengaitkan disk dengan volume yang telah didefinisikan di pool penyimpanan libvirt.
  • XML Example:
    <disk type="volume" device="disk">
      <source pool="default" volume="disk.qcow2"/> <!-- vol -->
    </disk>
    

71. wwn

  • Arti: Menentukan World Wide Name (WWN) untuk disk.
  • Fungsi:
    • Memberikan identifikasi unik global untuk disk, yang dapat dilihat oleh sistem operasi guest.
    • Berguna untuk skenario seperti multipath atau identifikasi disk di dalam guest.
  • XML Example:
    <disk type="file" device="disk">
      <source file="/var/lib/libvirt/images/disk.qcow2"/>
      <wwn>5001a4a000000001</wwn> <!-- wwn -->
    </disk>
    

NETWORK

Berikut adalah penjelasan mengenai atribut-atribut Libvirt yang terkait dengan konfigurasi jaringan:

1. alias.name

  • Fungsi: Memberikan nama alias untuk perangkat jaringan, memudahkan referensi dalam operasi manajemen (e.g., di virsh).
  • Contoh:
    <alias name="net0"/>
    
    Perangkat dapat diacu dengan net0 alih-alih alamat PCI.

2. boot.loadparm

  • Fungsi: Menentukan parameter boot untuk firmware tertentu (misalnya, pada sistem s390x atau virtio).
  • Contoh:
    <boot loadparm='LINUX'/>
    

3. boot.order

  • Fungsi: Mengatur urutan prioritas boot perangkat. Nilai lebih rendah berarti prioritas lebih tinggi.
  • Contoh:
    <boot order='1'/>
    
    Perangkat ini akan diprioritaskan pertama saat boot.

4. bridge

  • Fungsi: Menentukan nama bridge host yang digunakan untuk menghubungkan antarmuka jaringan virtual.
  • Contoh:
    <source bridge='br0'/>
    
    VM terhubung ke bridge fisik br0.

  • driver.ats: Mengaktifkan Address Translation Services untuk optimasi DMA (untuk perangkat PCIe).
  • driver.iommu: Mengaktifkan dukungan IOMMU (isolasi memori untuk perangkat).
  • driver.name: Menentukan driver backend (e.g., virtio, vhost, e1000).
  • driver.packed: Mengaktifkan mode packed virtqueues (optimasi performa Virtio).
  • driver.page_per_vq: Mengalokasikan satu halaman memori per virtqueue.
  • driver.queues: Menentukan jumlah antrian (queues) untuk multiqueue (meningkatkan throughput).

Contoh:

<driver name='vhost' queues='4' packed='on' iommu='on'/>

6. filterref.filter

  • Fungsi: Menerapkan filter jaringan (firewall berbasis MAC/ARP/IP) ke antarmuka.
  • Contoh:
    <filterref filter='clean-traffic'/>
    
    Filter clean-traffic akan memblokir traffic tidak valid.

7. link.state

  • Fungsi: Mengontrol status fisik antarmuka jaringan (up/down).
  • Contoh:
    <link state='down'/>
    
    Menonaktifkan koneksi jaringan untuk simulasi gangguan.

8. mac dan mac.address

  • Fungsi: Menentukan alamat MAC untuk antarmuka jaringan virtual.
    • mac: Elemen XML yang mengandung atribut address.
    • mac.address: Nilai alamat MAC yang digunakan.
  • Contoh:
    <mac address='52:54:00:12:34:56'/>
    
    Ini akan mengatur alamat MAC antarmuka jaringan ke 52:54:00:12:34:56.

9. model dan model.type

  • Fungsi: Menentukan model perangkat jaringan emulasi.
    • model: Elemen XML yang mengandung atribut type.
    • model.type: Jenis model perangkat jaringan (e.g., virtio, e1000, rtl8139).
  • Contoh:
    <model type='virtio'/>
    
    Menggunakan driver virtio untuk performa optimal.

10. mtu.size

  • Fungsi: Menentukan Maximum Transmission Unit (MTU) untuk antarmuka jaringan.
  • Contoh:
    <mtu size='9000'/>
    
    Mengatur MTU ke 9000 byte (untuk jaringan jumbo frames).

11. network

  • Fungsi: Menghubungkan antarmuka jaringan virtual ke jaringan virtual yang sudah didefinisikan di Libvirt.
  • Contoh:
    <source network='default'/>
    
    Menghubungkan VM ke jaringan virtual bernama default.

12. rom.bar

  • Fungsi: Mengontrol apakah ROM perangkat jaringan (e.g., PXE boot) terlihat di ruang memori BAR (Base Address Register).
  • Contoh:
    <rom bar='off'/>
    
    Menonaktifkan ROM dari ruang memori BAR.

13. rom.file

  • Fungsi: Menentukan file ROM kustom untuk perangkat jaringan.
  • Contoh:
    <rom file='/path/to/custom.rom'/>
    
    Menggunakan ROM kustom untuk boot PXE atau lainnya.

14. source

  • Fungsi: Menentukan sumber koneksi jaringan (e.g., bridge, jaringan virtual, atau passthrough).
  • Contoh:
    <source bridge='br0'/>
    
    Menghubungkan VM ke bridge fisik br0.

15. source.mode

  • Fungsi: Menentukan mode sumber jaringan (e.g., bridge, vepa, passthrough).
  • Contoh:
    <source mode='vepa'/>
    
    Menggunakan mode VEPA (Virtual Ethernet Port Aggregator).

16. source.path

  • Fungsi: Menentukan path ke sumber jaringan (e.g., path ke tap device atau VFIO passthrough).
  • Contoh:
    <source path='/dev/vhost-net'/>
    
    Menggunakan device vhost-net untuk akselerasi jaringan.

17. source.portgroup

  • Fungsi: Menentukan grup port dalam jaringan virtual (untuk QoS atau filter khusus).
  • Contoh:
    <source portgroup='high-priority'/>
    
    Menggunakan grup port high-priority yang sudah dikonfigurasi.

18. source.type

  • Fungsi: Menentukan jenis sumber jaringan (e.g., bridge, network, direct, user).
  • Contoh:
    <source type='network'/>
    
    Menghubungkan VM ke jaringan virtual.

19. target.dev

  • Fungsi: Menentukan nama perangkat jaringan di dalam VM.
  • Contoh:
    <target dev='vnet0'/>
    
    Perangkat akan muncul di VM sebagai vnet0.

20. trustGuestRxFilters

  • Fungsi: Mengizinkan VM untuk mengontrol filter penerimaan (RX) paket (e.g., MAC atau VLAN).
  • Contoh:
    <interface type='network' trustGuestRxFilters='yes'>
      <alias name='ua-myNIC'/>
    </interface>
    
    Mempercayai filter yang diterapkan oleh guest OS.

21. type

  • Fungsi: Menentukan jenis antarmuka jaringan virtual.
    • Nilai yang umum digunakan:
      • network: Menghubungkan VM ke jaringan virtual yang didefinisikan di Libvirt.
      • bridge: Menghubungkan VM ke bridge fisik atau logikal di host.
      • direct: Menggunakan passthrough langsung ke antarmuka fisik host.
      • user: Menggunakan jaringan NAT berbasis user (tanpa konfigurasi bridge).
      • ethernet: Untuk jaringan berbasis Ethernet.
      • vhostuser: Menggunakan vhost-user untuk akselerasi jaringan (umumnya dengan DPDK).
  • Contoh:
    <interface type='network'>
      <source network='default'/>
    </interface>
    
    Menghubungkan VM ke jaringan virtual default.

22. virtualport.parameters.instanceid

  • Fungsi: Menentukan ID unik untuk instance virtual port (digunakan dalam jaringan Open vSwitch atau VEPA).
  • Contoh:
    <virtualport type='openvswitch'>
      <parameters instanceid='00000000-0000-0000-0000-000000000001'/>
    </virtualport>
    

23. virtualport.parameters.interfaceid

  • Fungsi: Menentukan ID unik untuk antarmuka virtual port (digunakan dalam jaringan Open vSwitch atau VEPA).
  • Contoh:
    <virtualport type='openvswitch'>
      <parameters interfaceid='00000000-0000-0000-0000-000000000002'/>
    </virtualport>
    

24. virtualport.parameters.managerid

  • Fungsi: Menentukan ID manajer yang bertanggung jawab atas virtual port (digunakan dalam jaringan Open vSwitch atau VEPA).
  • Contoh:
    <virtualport type='openvswitch'>
      <parameters managerid='00000000-0000-0000-0000-000000000003'/>
    </virtualport>
    

25. virtualport.parameters.profileid

  • Fungsi: Menentukan ID profil yang digunakan untuk konfigurasi virtual port (misalnya, QoS atau filter).
  • Contoh:
    <virtualport type='openvswitch'>
      <parameters profileid='high-priority'/>
    </virtualport>
    

26. virtualport.parameters.typeid

  • Fungsi: Menentukan ID tipe untuk virtual port (digunakan dalam jaringan Open vSwitch atau VEPA).
  • Contoh:
    <virtualport type='openvswitch'>
      <parameters typeid='00000000-0000-0000-0000-000000000004'/>
    </virtualport>
    

27. virtualport.parameters.typeidversion

  • Fungsi: Menentukan versi ID tipe untuk virtual port (digunakan dalam jaringan Open vSwitch atau VEPA).
  • Contoh:
    <virtualport type='openvswitch'>
      <parameters typeidversion='1'/>
    </virtualport>
    

28. virtualport.type

  • Fungsi: Menentukan jenis virtual port yang digunakan.
    • Nilai yang umum digunakan:
      • openvswitch: Menggunakan Open vSwitch untuk virtual port.
      • 802.1Qbh: Menggunakan standar IEEE 802.1Qbh (Virtual Ethernet Port Aggregator - VEPA).
      • 802.1Qbg: Menggunakan standar IEEE 802.1Qbg (Virtual Ethernet Bridging - VEB).
      • midonet: Menggunakan MidoNet untuk virtual port.
  • Contoh:
    <virtualport type='openvswitch'/>
    

GRAPHICS

Berikut adalah penjelasan mengenai atribut-atribut dalam elemen <graphics> di libvirt, yang digunakan untuk mengkonfigurasi tampilan grafis mesin virtual (VM):

1. alias.name

Nama alias yang ditentukan pengguna untuk perangkat grafis, memudahkan referensi dalam konfigurasi lain.

2. clipboard.copypaste (boolean)

Mengaktifkan/menonaktifkan fitur salin-tempel (clipboard) antara host dan guest. Umumnya digunakan dengan protokol SPICE.

3. connected (status)

Menunjukkan status koneksi grafis saat ini (misal: keep atau disconnect).

4. defaultMode

Mode akses default:

  • secure: Hanya koneksi terenkripsi yang diizinkan.
  • insecure: Koneksi tanpa enkripsi diizinkan (untuk VNC/SPICE).
  • any: Keduanya diizinkan.

5. filetransfer.enable (boolean)

Mengaktifkan transfer file melalui protokol SPICE.

6. gl.enable (boolean)

Mengaktifkan akselerasi OpenGL/GPU virtual (misal: untuk SPICE dengan virtual GPU).

7. gl.rendernode

Menentukan node render GPU fisik (DRM render node) untuk akselerasi grafis (contoh: /dev/dri/renderD128).

8. image.compression

Kompresi gambar untuk menghemat bandwidth. Opsi:

  • auto_glz, auto_lz, quic, glz, lz, off (tergantung protokol).

9. keymap

Tata letak keyboard (misal: en-us, de, fr).

10. listen

Alamat IP tempat server grafis mendengarkan (misal: `0.0.0.0` untuk semua antarmuka).

11. listens[0-9]*.address

Alamat IP spesifik untuk instance listen tertentu (misal: `listens0.address=192.168.1.10`).

12. listens[0-9]*.network

Nama jaringan virtual tempat server grafis mendengarkan (misal: `default`).

13. listens[0-9]*.socket

Path ke socket UNIX untuk koneksi lokal (misal: `/var/lib/libvirt/qemu/domain-1-socket`).

14. listens[0-9]*.type

Tipe listen:  
- `address`: Mendengarkan alamat IP.  
- `network`: Terikat ke jaringan virtual.  
- `socket`: Menggunakan socket UNIX.  
- `none`: Tidak mendengarkan koneksi eksternal.

15. mouse.mode

Mode kursor:  
- `client`: Kursor dikontrol oleh aplikasi klien.  
- `server`: Kursor dikontrol oleh guest OS.

16. password

Kata sandi untuk mengakses tampilan grafis (jika autentikasi diaktifkan).

17. passwordValidTo

Masa berlaku kata sandi (format waktu ISO 8601, contoh: `2024-12-31T23:59:59`).

18. port

Port TCP untuk koneksi grafis (misal: `5900` untuk VNC, `5901` untuk SPICE).

19. streaming.mode

Mode streaming video (untuk SPICE):  
- `filter`: Hanya mengirim area yang berubah.  
- `all`: Mengirim semua frame.

20. tlsPort

Port untuk koneksi terenkripsi TLS (misal: `5902`).

21. type

Protokol grafis yang digunakan:  
- `vnc`: Remote desktop via VNC.  
- `spice`: Protokol modern dengan dukungan GPU, audio, dll.  
- `sdl`: Tampilan lokal menggunakan Simple DirectMedia Layer.  
- `egl-headless`: Tanpa tampilan, untuk akselerasi GPU headless.

Catatan:

  • SPICE vs VNC: Atribut seperti gl.enable, filetransfer.enable, dan streaming.mode hanya berlaku untuk SPICE.
  • Multiple Listeners: Gunakan pola listens0, listens1, dst., untuk mengikat ke beberapa alamat/jaringan.
  • Keamanan: Gunakan defaultMode=secure dan tlsPort untuk koneksi terenkripsi.

Contoh konfigurasi SPICE dengan akselerasi OpenGL:

<graphics type="spice" port="5901" listen="0.0.0.0" defaultMode="secure">
  <gl enable="yes" rendernode="/dev/dri/renderD128"/>
  <clipboard copypaste="yes"/>
</graphics>

22. websocket:

  • websocket adalah protokol komunikasi yang memungkinkan komunikasi dua arah antara klien dan server melalui koneksi TCP yang persisten.
  • Dalam konteks libvirt, ketika websocket diaktifkan, ini memungkinkan akses ke tampilan grafis VM melalui protokol WebSocket. Ini berguna jika Anda ingin mengakses konsol grafis VM melalui browser web atau aplikasi lain yang mendukung WebSocket.
  • Contoh penggunaan: Jika Anda menggunakan VNC (Virtual Network Computing) untuk mengakses tampilan grafis VM, Anda bisa mengonfigurasi VNC untuk menggunakan WebSocket sebagai transport layer, sehingga memungkinkan akses melalui browser web.

23. zlib.compression:

  • zlib.compression mengacu pada penggunaan kompresi data menggunakan library zlib untuk mengurangi ukuran data yang dikirimkan melalui jaringan.
  • Dalam konteks libvirt, ketika zlib.compression diaktifkan, data grafis yang dikirimkan dari VM ke klien (misalnya, melalui VNC atau SPICE) akan dikompresi terlebih dahulu menggunakan algoritma kompresi zlib. Ini dapat mengurangi bandwidth yang digunakan dan meningkatkan kinerja, terutama pada koneksi jaringan yang lambat.
  • Contoh penggunaan: Jika Anda menggunakan SPICE (Simple Protocol for Independent Computing Environments) untuk mengakses tampilan grafis VM, Anda bisa mengaktifkan kompresi zlib untuk mengurangi latensi dan meningkatkan responsivitas.

Contoh Konfigurasi dalam XML Libvirt:

Berikut adalah contoh bagaimana atribut GRAPHICS dengan websocket dan zlib.compression mungkin dikonfigurasi dalam file XML domain libvirt:

<graphics type='vnc' port='-1' autoport='yes' websocket='5700'>
  <compression type='zlib'/>
</graphics>
  • type='vnc': Menentukan bahwa protokol grafis yang digunakan adalah VNC.
  • websocket='5700': Mengaktifkan WebSocket pada port 5700 untuk akses melalui browser web.
  • <compression type='zlib'/>: Mengaktifkan kompresi zlib untuk data grafis yang dikirimkan.

Dengan konfigurasi ini, Anda dapat mengakses tampilan grafis VM melalui VNC dengan dukungan WebSocket dan kompresi zlib untuk meningkatkan efisiensi jaringan.

CONTROLLER

Berikut adalah penjelasan tentang atribut-atribut CONTROLLER dalam libvirt:

Driver Attributes (Umumnya untuk Virtio/PCIe)

1. driver.ats

  • Mengaktifkan Address Translation Services (ATS) pada PCIe controller.
  • Berguna untuk meningkatkan kinerja PCI passthrough dengan mengizinkan perangkat melakukan translasi alamat DMA sendiri.
  • Nilai: "on" atau "off".

2. driver.iommu

  • Mengaktifkan dukungan IOMMU (Input-Output Memory Management Unit) untuk isolasi DMA dan keamanan.
  • Diperlukan untuk VFIO passthrough atau SR-IOV.
  • Nilai: "on" atau "off".

3. driver.iothread

  • Menetapkan controller ke IOThread khusus untuk meningkatkan kinerja I/O dengan mengurangi kontenksi CPU.
  • Umumnya digunakan untuk disk/net virtio.
  • XML Example:
 <domain>
   ...
   <iothreads>4</iothreads>
   ...
   <controller type="scsi" model="virtio-scsi">
     <driver queues="16" iothread="4"/>
   </controller>
   ...
 </domain>
  • validasi dengan perintah berikut.
$ pidstat -t -p QEMU-PID
Linux 6.8.0-55-generic (nova.topan.host)        03/29/2025      _x86_64_        (2 CPU)

11:05:16 PM   UID      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:05:16 PM  1000      1795         -    0.33    0.75    2.46    0.01    3.54     0  qemu-system-x86
11:05:16 PM  1000         -      1795    0.04    0.05    0.00    0.01    0.09     0  |__qemu-system-x86
11:05:16 PM  1000         -      1811    0.00    0.00    0.00    0.00    0.00     1  |__qemu-system-x86
11:05:16 PM  1000         -      1814    0.00    0.00    0.00    0.00    0.00     1  |__IO iothread1
11:05:16 PM  1000         -      1815    0.00    0.00    0.00    0.00    0.00     0  |__IO iothread2
11:05:16 PM  1000         -      1817    0.00    0.00    0.00    0.00    0.00     1  |__IO iothread3
11:05:16 PM  1000         -      1819    0.04    0.04    0.00    0.04    0.08     0  |__IO iothread4
11:05:16 PM  1000         -      1825    0.00    0.01    0.00    0.01    0.01     1  |__vhost-1795
11:05:16 PM  1000         -      1826    0.00    0.01    0.00    0.01    0.01     0  |__vhost-1795
11:05:16 PM  1000         -      1827    0.01    0.00    0.00    0.00    0.01     1  |__IO mon_iothread
11:05:16 PM  1000         -      1829    0.15    0.34    1.34    0.12    1.83     0  |__CPU 0/KVM
11:05:16 PM  1000         -      1830    0.08    0.19    1.12    0.11    1.40     1  |__CPU 1/KVM
11:05:16 PM  1000         -      1840    0.00    0.00    0.00    0.00    0.00     1  |__vnc_worker
11:05:16 PM  1000         -      2230    0.00    0.00    0.00    0.00    0.00     1  |__worker

4. driver.packed

  • Mengaktifkan virtio packed rings (fitur QEMU modern) untuk mengurangi overhead komunikasi antara guest dan host.
  • Hanya berlaku untuk controller virtio (misal: virtio-net, virtio-blk).

5. driver.page_per_vq

  • Mengalokasikan satu halaman memori terpisah per virtqueue untuk isolasi atau kinerja.
  • Nilai: "on" atau "off".

6. driver.queues

  • Menentukan jumlah queue untuk controller yang mendukung multi-queue (misal: virtio-net).
  • Meningkatkan throughput dengan paralelisasi.

Konfigurasi Umum Controller

7. index

  • Nomor unik untuk membedakan controller sejenis (misal: multiple PCI controllers).
  • Contoh: <controller type='pci' index='0'>.

8. model

  • Menentukan model emulasi hardware (misal: "virtio", "ich9", "pcie-root", "nec-xhci").
  • Contoh: <controller type='usb' model='qemu-xhci'>.

9. type

  • Jenis controller: "pci", "usb", "scsi", "virtio-serial", "ccid", dll.
  • Wajib diisi.

10. vectors

- Jumlah **interrupt vectors** (MSI-X) yang dialokasikan untuk controller.
- Contoh: `<controller ... vectors='32'>`.

PCI/PCIe-Specific Attributes

11. num_pcie_root_ports

- Jumlah **PCIe root ports** yang tersedia pada PCIe root controller.
- Memengaruhi jumlah perangkat yang bisa di-hotplug.

12. target.busNr

- Nomor bus PCI yang ditetapkan ke controller (misal: `busNr='0x00'`).

13. maxGrantFrames

- (Xen-specific) Batas maksimum **grant frames** untuk berbagi memori antar domain.
- Contoh: `maxGrantFrames='32'`.

USB-Specific Attributes

14. master.startport

- Port awal untuk controller USB master (misal: `startport='0'`).

15. target.chassis

- Nomor chassis untuk mengelompokkan USB controller (misal: `chassis='1'`).

16. target.chassisNr

- Alias untuk `target.chassis`.

17. target.port

- Port USB yang dituju dalam guest (misal: `port='0x01'`).

Hotplug & Topologi

18. target.hotplug

- Mengizinkan **hotplug** perangkat pada controller.
- Nilai: `"on"` atau `"off"`.

19. target.index

- Posisi controller dalam hierarki guest (misal: untuk USB).

20. target.node

- Mengaitkan controller dengan **NUMA node** tertentu untuk optimasi lokalisasi memori.

Contoh XML

<controller type='pci' index='0' model='pcie-root'>
  <driver queues='4' packed='on'/>
  <target busNr='0' hotplug='on'/>
</controller>

<controller type='usb' index='0' model='qemu-xhci'>
  <master startport='0'/>
  <target chassis='1' port='0x01'/>
</controller>

Catatan

  • Beberapa atribut hanya tersedia pada hypervisor/QEMU versi tertentu.
  • Atribut seperti driver.packed dan driver.ats memerlukan dukungan hardware guest.

WATCHDOG

Berikut penjelasan mengenai atribut WATCHDOG dalam libvirt:

1. model

Menentukan jenis perangkat watchdog virtual yang diemulasikan untuk guest VM.

  • Contoh Nilai:
    • i6300esb (default): Watchdog PCI berbasis Intel 6300ESB.
    • ib700: Watchdog ISA lama (kurang umum).
  • Fungsi:
    Model ini menentukan cara perangkat berinteraksi dengan guest OS. Misalnya, driver di guest OS (seperti i6300esb di Linux) harus sesuai dengan model yang dipilih.

2. action

Menentukan tindakan yang diambil hypervisor ketika watchdog timer kedaluwarsa (tidak di-reset oleh guest OS).

  • Contoh Nilai:
    • reset: Mereset VM secara paksa.
    • poweroff: Mematikan VM.
    • pause: Menjeda VM.
    • none: Tidak melakukan apa-apa (hanya log).
    • shutdown: Mematikan VM secara graceful (harus didukung guest OS).
    • dump: Membuat core dump sebelum mematikan VM.
  • Fungsi:
    Berguna untuk pemulihan otomatis jika guest OS mengalami hang/crash.

3. alias.name

Nama alias unik yang diberikan ke perangkat watchdog untuk memudahkan referensi.

  • Contoh:
    <watchdog model='i6300esb' action='reset'>
      <alias name='my-watchdog'/>
    </watchdog>
    
  • Fungsi:
    • Memudahkan pengelolaan perangkat melalui CLI (misal: virsh) atau API.
    • Contoh penggunaan:
      virsh dumpxml vm-name | grep "alias name"  # Melihat alias perangkat
      

Contoh XML Lengkap:

<devices>
  <watchdog model='i6300esb' action='reset'>
    <alias name='my-watchdog'/>
  </watchdog>
</devices>

Catatan:

  • Watchdog memerlukan konfigurasi di guest OS (misal: instal driver i6300esb dan layanan watchdog seperti watchdogd).
  • Jika guest OS gagal mereset timer (misal karena crash), hypervisor akan menjalankan action yang ditentukan.
  • Alias berguna untuk operasi seperti hot-unplug atau debugging.

IOTHREADS

Penjelasan dan Contoh Penggunaan Attribute IOTHREADS pada Libvirt

Berikut adalah penjelasan mengenai atribut terkait I/O threads (iothreads) dalam Libvirt beserta contoh penggunaannya:


1. defaultiothread.thread_pool_max

  • Arti: Menentukan jumlah maksimum thread pekerja (worker thread) yang dapat diaktifkan dalam thread pool untuk I/O threads yang tidak dikonfigurasi secara eksplisit.
  • Contoh Penggunaan:
    <domain>
      ...
      <defaultiothread thread_pool_max="4"/>
      <iothreads>2</iothreads>
      ...
    </domain>
    
    • Dua I/O threads akan dibuat dengan thread pool maksimum 4 thread (karena tidak ada konfigurasi khusus).

2. defaultiothread.thread_pool_min

  • Arti: Menentukan jumlah minimum thread pekerja yang tetap aktif dalam thread pool untuk I/O threads default.
  • Contoh Penggunaan:
    <defaultiothread thread_pool_min="1" thread_pool_max="4"/>
    
    • Setiap I/O thread default akan memiliki minimal 1 thread dan maksimal 4 thread di pool-nya.

3. iothreadids.iothread[0-9]*.id

  • Arti: ID numerik untuk mengidentifikasi I/O thread tertentu. Biasanya dimulai dari 1.
  • Contoh Penggunaan:
    <iothreadids>
      <iothread id="1"/>
      <iothread id="2"/>
    </iothreadids>
    
    • Membuat dua I/O threads dengan ID 1 dan 2.

4. iothreadids.iothread[0-9]*.thread_pool_max

  • Arti: Menentukan jumlah maksimum thread pekerja untuk I/O thread spesifik yang dikonfigurasi.
  • Contoh Penggunaan:
    <iothreadids>
      <iothread id="1" thread_pool_max="8"/>
      <iothread id="2" thread_pool_max="2"/>
    </iothreadids>
    
    • I/O thread 1 memiliki maksimal 8 thread, sedangkan thread 2 maksimal 2 thread.

5. iothreadids.iothread[0-9]*.thread_pool_min

  • Arti: Menentukan jumlah minimum thread pekerja untuk I/O thread spesifik.
  • Contoh Penggunaan:
    <iothreadids>
      <iothread id="1" thread_pool_min="2" thread_pool_max="8"/>
    </iothreadids>
    
    • I/O thread 1 memiliki minimal 2 thread yang selalu aktif.

6. iothreads

  • Arti: Menentukan total jumlah I/O threads yang akan dibuat untuk domain VM.
  • Contoh Penggunaan:
    <domain>
      ...
      <iothreads>3</iothreads>
      ...
    </domain>
    
    • Akan membuat 3 I/O threads. Jika tidak ada konfigurasi khusus, semua menggunakan pengaturan defaultiothread.

Contoh Konfigurasi Lengkap

<domain>
  ...
  <!-- Jumlah total I/O threads -->
  <iothreads>3</iothreads>

  <!-- Konfigurasi default untuk I/O threads -->
  <defaultiothread thread_pool_min="1" thread_pool_max="4"/>

  <!-- Konfigurasi spesifik untuk I/O thread 1 dan 2 -->
  <iothreadids>
    <iothread id="1" thread_pool_min="2" thread_pool_max="8"/>
    <iothread id="2" thread_pool_max="2"/>
  </iothreadids>
  ...
</domain>

Penjelasan:

  • 3 I/O threads dibuat.
  • I/O thread 1: thread_pool_min=2, thread_pool_max=8.
  • I/O thread 2: thread_pool_min=1 (default), thread_pool_max=2.
  • I/O thread 3: Menggunakan pengaturan default (min=1, max=4).

Use Case

  • Optimasi I/O: Pada VM dengan disk berkinerja tinggi (e.g., NVMe), atur thread_pool_max lebih besar untuk meningkatkan paralelisasi.
  • Penghematan Sumber Daya: Untuk disk yang jarang diakses, gunakan thread_pool_min=1 agar tidak membebani sistem.

FEATURES

Berikut penjelasan arti dari setiap atribut FEATURES di libvirt:

Fitur Umum

  1. acpi

    • Kepanjangan: Advanced Configuration and Power Interface.
    • Fungsi: Memungkinkan guest OS mengelola daya (shutdown, reboot, sleep).
    • Default: Aktif untuk kebanyakan OS.
  2. apic

    • Kepanjangan: Advanced Programmable Interrupt Controller.
    • Fungsi: Memungkinkan interrupt handling yang efisien untuk sistem multi-core.
    • Kebutuhan: Diperlukan untuk SMP (multi-vCPU) pada x86.
  3. apic.eoi

    • Kepanjangan: End of Interrupt (EOI).
    • Fungsi: Mengoptimalkan penanganan interrupt dengan mengirim sinyal EOI ke host.
    • Dampak: Meningkatkan performa I/O pada guest.
  4. pae

    • Kepanjangan: Physical Address Extension.
    • Fungsi: Memungkinkan OS 32-bit mengakses RAM >4 GB.
    • Contoh: Windows XP/7 32-bit dengan RAM besar.

Contoh:

<features>
  <acpi/>             <!-- Aktifkan ACPI -->
  <apic>              <!-- Aktifkan APIC -->
    <eoi state='on'/> <!-- Aktifkan optimasi EOI -->
  </apic>
  <pae/>              <!-- Aktifkan PAE -->
</features>

ARM-specific

  1. gic.version
    • Kepanjangan: Generic Interrupt Controller.
    • Fungsi: Menentukan versi GIC (v2, v3, atau v4) untuk ARM guests.
    • Penting: Kompatibilitas OS (misal: GICv3 untuk Linux modern).

Contoh:

<features>
  <gic version='v3'/>  <!-- GIC v3 untuk ARM -->
</features>

Virtualisasi Berbasis Hardware

  1. hap
    • Kepanjangan: Hardware Assisted Paging.
    • Fungsi: Mengaktifkan nested paging (AMD-V NPT/Intel EPT) untuk manajemen memori yang lebih cepat.
    • Default: Aktif jika hardware mendukung.

Optimasi Hyper-V (Windows Guests)

  1. hyperv.relaxed.state

    • Fungsi: Mengurangi pengecekan timing untuk meningkatkan performa.
    • Target: OS yang di-“enlightened” (Windows/Linux dengan Hyper-V drivers).
  2. hyperv.reset.state

    • Fungsi: Memungkinkan guest mereset state VM secara software.
  3. hyperv.spinlocks.retries

    • Fungsi: Menentukan jumlah retry spinlock sebelum memberi notifikasi ke Hyper-V.
    • Contoh Nilai: 8191 (default).
  4. hyperv.spinlocks.state

    • Fungsi: Mengaktifkan paravirtual spinlocks untuk SMP guests.
  5. hyperv.synic.state

    • Fungsi: Mengaktifkan Synthetic Interrupt Controller (SynIC) untuk notifikasi inter-processor.
  6. hyperv.vapic.state

    • Fungsi: Virtual APIC untuk akses APIC tanpa exit ke hypervisor.
    • Dampak: Mengurangi overhead interrupt.

Contoh:

<features>
  <hyperv>
    <relaxed state='on'/>                   <!-- hyperv.relaxed.state -->
    <vapic state='on'/>                     <!-- hyperv.vapic.state -->
    <spinlocks state='on' retries='8191'/>  <!-- hyperv.spinlocks -->
    <synic state='on'/>                     <!-- hyperv.synic.state -->
    <reset state='on'/>                     <!-- hyperv.reset.state -->
  </hyperv>
</features>

KVM-specific

  1. kvm.hidden.state

    • Fungsi: Menyembunyikan signature KVM dari guest (untuk menghindari deteksi virtualisasi).
    • Contoh: Diperlukan untuk macOS guests.
  2. kvm.hint-dedicated.state

    • Fungsi: Memberi sinyal ke guest bahwa vCPU didedikasikan untuk core fisik tertentu.
    • Dampak: Optimasi penjadwalan CPU.
  3. kvm.poll-control.state

    • Fungsi: Mengontrol polling interrupt guest untuk mengurangi CPU usage.

Contoh:

<features>
  <kvm>
    <hidden state='on'/>            <!-- kvm.hidden.state (untuk macOS) -->
    <poll-control state='on'/>      <!-- kvm.poll-control.state -->
    <hint-dedicated state='on'/>      <!-- kvm.hint-dedicated.state -->
  </kvm>
</features>

Fitur Lainnya

  1. ioapic.driver

    • Opsi: kvm (default) atau qemu.
    • Fungsi: Memilih driver emulasi I/O APIC.
  2. pmu.state

    • Kepanjangan: Performance Monitoring Unit.
    • Fungsi: Mengaktifkan profiling performa di guest (misal: perf di Linux).
    • Risiko: Potensi kebocoran informasi ke guest.
  3. privnet

    • Fungsi: Membuat jaringan privat untuk VM (isolasi dari host).
    • Implementasi: Menghapus default route di guest.
  4. pvspinlock.state

    • Fungsi: Paravirtual spinlocks untuk mengurangi kontensi lock pada SMP guests.
  5. smm.state

    • Kepanjangan: System Management Mode.
    • Fungsi: Diperlukan untuk UEFI Secure Boot atau firmware tertentu.
  6. viridian

    • Fungsi: Mengaktifkan semua fitur Viridian (Hyper-V) untuk Windows guests.
  7. vmcoreinfo.state

    • Fungsi: Menyisipkan data struktur kernel Linux di memori untuk debugging (misal: crash utility).
  8. vmport.state

    • Fungsi: Emulasi VMware I/O port untuk kompatibilitas dengan VMware Tools.

Catatan:

  • Default: Sebagian besar fitur dinonaktifkan kecuali disebutkan.
  • Hypervisor: Beberapa fitur hanya berlaku untuk KVM/QEMU.
  • Arsitektur: gic.version khusus ARM, apic/pae untuk x86.

Full XML

Berikut beberapa contoh XML sesuai OS yang digunakan.

Rocky 8

<domain type="kvm">
  <name>rocky-basic</name>
  <uuid>746e914a-e22d-4e58-8a76-ae17a766da29</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://rockylinux.org/rocky/8"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="GiB">6</memory>
  <currentMemory unit="GiB">2</currentMemory>
  <vcpu current="2">16</vcpu>
  <iothreads>4</iothreads>
  <os>
    <type arch="x86_64" machine="q35">hvm</type>
    <boot dev="hd"/>
  </os>
  <features>
    <acpi/>
    <apic eoi="on"/>
    <ioapic driver="qemu"/>
  </features>
  <cpu mode="host-model">
    <topology sockets="1" dies="1" cores="16" threads="1"/>
  </cpu>
  <clock offset="utc">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
  </clock>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="vmdk" cache="none" copy_on_read="on" io="native"/>
      <source file="/media/erfan/vms/rocky/rocky-basic.vmdk"/>
      <target dev="sda" bus="scsi" rotation_rate="1"/>
    </disk>
    <controller type="scsi" model="virtio-scsi">
      <driver queues="16" iothread="4" packed="on" page_per_vq="on"/>
    </controller>
    <controller type="usb" model="qemu-xhci" ports="15"/>
    <controller type="pci" model="pcie-root"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <interface type="network" trustGuestRxFilters="yes">
      <source network="net0"/>
      <mac address="00:b1:cc:cb:aa:6d"/>
      <model type="virtio"/>
      <filterref filter="clean-traffic"/>
      <mtu size="9000"/>
      <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='2' rx_queue_size='256' tx_queue_size='256' packed='on' page_per_vq='on'>
        <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
        <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
      </driver>
      <coalesce>
        <rx>
          <frames max='7'/>
        </rx>
      </coalesce>
    </interface>
    <console type="pty"/>
    <channel type="unix">
      <source mode="bind"/>
      <target type="virtio" name="org.qemu.guest_agent.0"/>
    </channel>
    <input type="tablet" bus="usb"/>
    <graphics type="vnc" port="-1"/>
    <video>
      <model type="cirrus"/>
    </video>
    <watchdog model="itco" action="reset"/>
    <memballoon model="virtio"/>
    <rng model="virtio">
      <backend model="random">/dev/urandom</backend>
    </rng>
  </devices>
</domain>

Ubuntu 24.04

<domain type="kvm">
  <name>ubuntu-basic</name>
  <uuid>09c89f8b-214b-4cef-bda1-3ca9d7689851</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://ubuntu.com/ubuntu/24.04"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="GiB">6</memory>
  <currentMemory unit="GiB">4</currentMemory>
  <vcpu current="2">16</vcpu>
  <iothreads>4</iothreads>
  <os>
    <type arch="x86_64" machine="q35">hvm</type>
    <boot dev="hd"/>
  </os>
  <features>
    <acpi/>
    <apic eoi="on"/>
    <ioapic driver="qemu"/>
  </features>
  <cpu mode="host-model">
    <topology sockets="1" dies="1" cores="16" threads="1"/>
  </cpu>
  <clock offset="utc">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
  </clock>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="vmdk" cache="none" copy_on_read="on" io="native"/>
      <source file="/media/erfan/vms/ubuntu/ubuntu-basic.vmdk"/>
      <target dev="sda" bus="scsi" rotation_rate="1"/>
    </disk>
    <controller type="scsi" model="virtio-scsi">
      <driver queues="16" iothread="4" packed="on" page_per_vq="on"/>
    </controller>
    <controller type="usb" model="qemu-xhci" ports="15"/>
    <controller type="pci" model="pcie-root"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <controller type="pci" model="pcie-root-port"/>
    <interface type="network" trustGuestRxFilters="yes">
      <source network="net0"/>
      <mac address="00:50:56:3e:83:c7"/>
      <model type="virtio"/>
      <filterref filter="clean-traffic"/>
      <mtu size="9000"/>
      <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='2' rx_queue_size='256' tx_queue_size='256' packed='on' page_per_vq='on'>
        <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
        <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
      </driver>
      <coalesce>
        <rx>
          <frames max='7'/>
        </rx>
      </coalesce>
    </interface>
    <console type="pty"/>
    <channel type="unix">
      <source mode="bind"/>
      <target type="virtio" name="org.qemu.guest_agent.0"/>
    </channel>
    <input type="tablet" bus="usb"/>
    <graphics type="vnc" port="-1"/>
    <video>
      <model type="cirrus"/>
    </video>
    <watchdog model="itco" action="reset"/>
    <memballoon model="virtio"/>
    <rng model="virtio">
      <backend model="random">/dev/urandom</backend>
    </rng>
  </devices>
</domain>

Referensi: