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
danvcpus.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) atauoff
. - 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 viamodel
).
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
atauno
.
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) atauprivate
.
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
atauno
.
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
atauno
.
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:
Artinya, fitur AVX opsional dan tidak wajib ada di host.
<feature policy='optional' name='avx'/>
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:
Artinya, fitur SSE4.2 harus ada di host, atau VM tidak akan berjalan.
<feature policy='require' name='sse4.2'/>
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:
Artinya, fitur AMD SEV harus diaktifkan dan aman.
<feature policy='require' name='sev' secure='yes'/>
41. topology.cores
- Arti: Menentukan jumlah core per socket dalam topologi CPU.
- Konteks: Digunakan dalam elemen
<topology>
untuk mengonfigurasi virtual CPU topology. - Contoh:
Artinya, setiap socket memiliki 4 core.
<topology sockets='2' cores='4' threads='2'/>
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:
Artinya, setiap socket memiliki 2 dies, dan setiap die memiliki 4 core.
<topology sockets='2' dies='2' cores='4' threads='2'/>
43. topology.sockets
- Arti: Menentukan jumlah socket CPU dalam topologi virtual.
- Konteks: Digunakan dalam elemen
<topology>
untuk mengonfigurasi virtual CPU topology. - Contoh:
Artinya, VM memiliki 2 socket CPU.
<topology sockets='2' cores='4' threads='2'/>
44. topology.threads
- Arti: Menentukan jumlah thread per core dalam topologi CPU.
- Konteks: Digunakan dalam elemen
<topology>
untuk mengonfigurasi virtual CPU topology. - Contoh:
Artinya, setiap core memiliki 2 thread (Hyper-Threading).
<topology sockets='2' cores='4' threads='2'/>
45. vendor
- Arti: Menentukan vendor CPU (misal: Intel, AMD).
- Konteks: Digunakan dalam elemen
<cpu>
untuk menentukan vendor CPU yang diemulasikan. - Contoh:
Artinya, VM akan menggunakan model CPU Intel Haswell.
<cpu mode='host-model'> <vendor>Intel</vendor> <model>Haswell</model> </cpu>
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:
Dalam contoh ini, libvirt akan mencoba mendeteksi varian OS dari media instalasi yang dimasukkan ke dalam
<os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='cdrom'/> <os_variant detect='yes'/> </os>
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:
Di sini,
<os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='hd'/> <os_variant id='rhel8'/> </os>
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:
Dalam contoh ini,
<os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='hd'/> <os_variant name='Ubuntu 20.04 LTS'/> </os>
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:
Di sini,
<os> <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type> <boot dev='hd'/> <os_variant require='rhel8'/> </os>
require='rhel8'
memastikan bahwa varian OS Red Hat Enterprise Linux 8 tersedia sebelum VM dikonfigurasi.
5. short-id
- Arti:
short-id
adalah versi singkat dariid
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.
- Memudahkan identifikasi disk saat menggunakan perintah CLI (seperti
- 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.
- Menentukan jenis format (seperti
- 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 denganorder='2'
.
- Menentukan urutan boot: VM akan mencoba boot dari perangkat dengan nilai
- 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
, atauunsafe
. - 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.
- Memungkinkan pengaturan caching seperti
- 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.
- Jika diaktifkan (
- 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
, atauunmap
(untuk melepaskan blok nol).
- Jika diatur ke
- 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.
- Opsi:
- 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.
- Opsi:
- 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 diskqcow2
dengan cache modenone
/directsync
. - Workload I/O intensif. Banyak operasi I/O paralel (misal: database, VM dengan disk aktif).
- Kernel host modern (≥ 2.6.32) dengan dukungan AIO yang baik (misal: Linux ≥ 5.1 dengan
- 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 denganO_DIRECT
. - Workload I/O kecil atau terfragmentasi. Threads lebih toleran terhadap operasi I/O acak berskala kecil.
- Gunakan
- 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).
- Opsi umum:
- 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.
- Opsi umum:
- 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
ataublock
.
- Menunjukkan lokasi file image (misalnya,
- 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) atauunfiltered
. unfiltered
memungkinkan akses langsung ke perintah SCSI tingkat rendah, tetapi membutuhkan izin khusus.
- Opsi:
- 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.
- Opsi:
- 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
.
- Digunakan untuk mengaitkan disk dengan perangkat blok di host (misalnya,
- 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.
- Digunakan untuk tipe 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
.
- Digunakan untuk tipe disk
- 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
, atauunix
(untuk socket). - Contoh:
tcp
untuk koneksi jaringan biasa.
- Opsi:
- 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.
- Jika
- 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.
- Opsi:
- 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.
- Jika
- 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
atauexclusive
. - Contoh:
exclusive
untuk memastikan hanya satu VM yang dapat mengakses disk.
- Opsi:
- 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.
- Opsi:
- 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.
- Contoh:
- 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.
- Jika
- 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).
- Opsi:
- 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.
- Opsi:
- 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.
- Jika
- 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.
- Opsi:
- 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 busvirtio
, atauhdb
untuk disk kedua di buside
. - Nama ini akan terlihat oleh sistem operasi guest.
- Contoh:
- 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).
- Jika
- 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, atau1
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.
- Jika
- 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.
- Jika
- 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.
- Opsi:
- 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:
Perangkat dapat diacu dengan
<alias name="net0"/>
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:
Perangkat ini akan diprioritaskan pertama saat boot.
<boot order='1'/>
4. bridge
- Fungsi: Menentukan nama bridge host yang digunakan untuk menghubungkan antarmuka jaringan virtual.
- Contoh:
VM terhubung ke bridge fisik
<source bridge='br0'/>
br0
.
5. Driver-related Attributes
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:
Filter
<filterref filter='clean-traffic'/>
clean-traffic
akan memblokir traffic tidak valid.
7. link.state
- Fungsi: Mengontrol status fisik antarmuka jaringan (up/down).
- Contoh:
Menonaktifkan koneksi jaringan untuk simulasi gangguan.
<link state='down'/>
8. mac
dan mac.address
- Fungsi: Menentukan alamat MAC untuk antarmuka jaringan virtual.
mac
: Elemen XML yang mengandung atributaddress
.mac.address
: Nilai alamat MAC yang digunakan.
- Contoh:
Ini akan mengatur alamat MAC antarmuka jaringan ke
<mac address='52:54:00:12:34:56'/>
52:54:00:12:34:56
.
9. model
dan model.type
- Fungsi: Menentukan model perangkat jaringan emulasi.
model
: Elemen XML yang mengandung atributtype
.model.type
: Jenis model perangkat jaringan (e.g.,virtio
,e1000
,rtl8139
).
- Contoh:
Menggunakan driver
<model type='virtio'/>
virtio
untuk performa optimal.
10. mtu.size
- Fungsi: Menentukan Maximum Transmission Unit (MTU) untuk antarmuka jaringan.
- Contoh:
Mengatur MTU ke 9000 byte (untuk jaringan jumbo frames).
<mtu size='9000'/>
11. network
- Fungsi: Menghubungkan antarmuka jaringan virtual ke jaringan virtual yang sudah didefinisikan di Libvirt.
- Contoh:
Menghubungkan VM ke jaringan virtual bernama
<source network='default'/>
default
.
12. rom.bar
- Fungsi: Mengontrol apakah ROM perangkat jaringan (e.g., PXE boot) terlihat di ruang memori BAR (Base Address Register).
- Contoh:
Menonaktifkan ROM dari ruang memori BAR.
<rom bar='off'/>
13. rom.file
- Fungsi: Menentukan file ROM kustom untuk perangkat jaringan.
- Contoh:
Menggunakan ROM kustom untuk boot PXE atau lainnya.
<rom file='/path/to/custom.rom'/>
14. source
- Fungsi: Menentukan sumber koneksi jaringan (e.g., bridge, jaringan virtual, atau passthrough).
- Contoh:
Menghubungkan VM ke bridge fisik
<source bridge='br0'/>
br0
.
15. source.mode
- Fungsi: Menentukan mode sumber jaringan (e.g.,
bridge
,vepa
,passthrough
). - Contoh:
Menggunakan mode VEPA (Virtual Ethernet Port Aggregator).
<source mode='vepa'/>
16. source.path
- Fungsi: Menentukan path ke sumber jaringan (e.g., path ke tap device atau VFIO passthrough).
- Contoh:
Menggunakan device
<source path='/dev/vhost-net'/>
vhost-net
untuk akselerasi jaringan.
17. source.portgroup
- Fungsi: Menentukan grup port dalam jaringan virtual (untuk QoS atau filter khusus).
- Contoh:
Menggunakan grup port
<source portgroup='high-priority'/>
high-priority
yang sudah dikonfigurasi.
18. source.type
- Fungsi: Menentukan jenis sumber jaringan (e.g.,
bridge
,network
,direct
,user
). - Contoh:
Menghubungkan VM ke jaringan virtual.
<source type='network'/>
19. target.dev
- Fungsi: Menentukan nama perangkat jaringan di dalam VM.
- Contoh:
Perangkat akan muncul di VM sebagai
<target dev='vnet0'/>
vnet0
.
20. trustGuestRxFilters
- Fungsi: Mengizinkan VM untuk mengontrol filter penerimaan (RX) paket (e.g., MAC atau VLAN).
- Contoh:
Mempercayai filter yang diterapkan oleh guest OS.
<interface type='network' trustGuestRxFilters='yes'> <alias name='ua-myNIC'/> </interface>
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).
- Nilai yang umum digunakan:
- Contoh:
Menghubungkan VM ke jaringan virtual
<interface type='network'> <source network='default'/> </interface>
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.
- Nilai yang umum digunakan:
- 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
, danstreaming.mode
hanya berlaku untuk SPICE. - Multiple Listeners: Gunakan pola
listens0
,listens1
, dst., untuk mengikat ke beberapa alamat/jaringan. - Keamanan: Gunakan
defaultMode=secure
dantlsPort
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 libraryzlib
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 kompresizlib
. 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 kompresizlib
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
dandriver.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 (sepertii6300esb
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
- Memudahkan pengelolaan perangkat melalui CLI (misal:
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 sepertiwatchdogd
). - 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
.
- Akan membuat 3 I/O threads. Jika tidak ada konfigurasi khusus, semua menggunakan pengaturan
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
-
acpi
- Kepanjangan: Advanced Configuration and Power Interface.
- Fungsi: Memungkinkan guest OS mengelola daya (shutdown, reboot, sleep).
- Default: Aktif untuk kebanyakan OS.
-
apic
- Kepanjangan: Advanced Programmable Interrupt Controller.
- Fungsi: Memungkinkan interrupt handling yang efisien untuk sistem multi-core.
- Kebutuhan: Diperlukan untuk SMP (multi-vCPU) pada x86.
-
apic.eoi
- Kepanjangan: End of Interrupt (EOI).
- Fungsi: Mengoptimalkan penanganan interrupt dengan mengirim sinyal EOI ke host.
- Dampak: Meningkatkan performa I/O pada guest.
-
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
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
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)
-
hyperv.relaxed.state
- Fungsi: Mengurangi pengecekan timing untuk meningkatkan performa.
- Target: OS yang di-“enlightened” (Windows/Linux dengan Hyper-V drivers).
-
hyperv.reset.state
- Fungsi: Memungkinkan guest mereset state VM secara software.
-
hyperv.spinlocks.retries
- Fungsi: Menentukan jumlah retry spinlock sebelum memberi notifikasi ke Hyper-V.
- Contoh Nilai:
8191
(default).
-
hyperv.spinlocks.state
- Fungsi: Mengaktifkan paravirtual spinlocks untuk SMP guests.
-
hyperv.synic.state
- Fungsi: Mengaktifkan Synthetic Interrupt Controller (SynIC) untuk notifikasi inter-processor.
-
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
-
kvm.hidden.state
- Fungsi: Menyembunyikan signature KVM dari guest (untuk menghindari deteksi virtualisasi).
- Contoh: Diperlukan untuk macOS guests.
-
kvm.hint-dedicated.state
- Fungsi: Memberi sinyal ke guest bahwa vCPU didedikasikan untuk core fisik tertentu.
- Dampak: Optimasi penjadwalan CPU.
-
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
-
ioapic.driver
- Opsi:
kvm
(default) atauqemu
. - Fungsi: Memilih driver emulasi I/O APIC.
- Opsi:
-
pmu.state
- Kepanjangan: Performance Monitoring Unit.
- Fungsi: Mengaktifkan profiling performa di guest (misal:
perf
di Linux). - Risiko: Potensi kebocoran informasi ke guest.
-
privnet
- Fungsi: Membuat jaringan privat untuk VM (isolasi dari host).
- Implementasi: Menghapus default route di guest.
-
pvspinlock.state
- Fungsi: Paravirtual spinlocks untuk mengurangi kontensi lock pada SMP guests.
-
smm.state
- Kepanjangan: System Management Mode.
- Fungsi: Diperlukan untuk UEFI Secure Boot atau firmware tertentu.
-
viridian
- Fungsi: Mengaktifkan semua fitur Viridian (Hyper-V) untuk Windows guests.
-
vmcoreinfo.state
- Fungsi: Menyisipkan data struktur kernel Linux di memori untuk debugging (misal:
crash
utility).
- Fungsi: Menyisipkan data struktur kernel Linux di memori untuk debugging (misal:
-
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: