|
@@ -0,0 +1,100 @@
|
|
|
|
+Paravirtualized KVM features
|
|
|
|
+============================
|
|
|
|
+
|
|
|
|
+Description
|
|
|
|
+-----------
|
|
|
|
+
|
|
|
|
+In some cases when implementing hardware interfaces in software is slow, ``KVM``
|
|
|
|
+implements its own paravirtualized interfaces.
|
|
|
|
+
|
|
|
|
+Setup
|
|
|
|
+-----
|
|
|
|
+
|
|
|
|
+Paravirtualized ``KVM`` features are represented as CPU flags. The following
|
|
|
|
+features are enabled by default for any CPU model when ``KVM`` acceleration is
|
|
|
|
+enabled:
|
|
|
|
+
|
|
|
|
+- ``kvmclock``
|
|
|
|
+- ``kvm-nopiodelay``
|
|
|
|
+- ``kvm-asyncpf``
|
|
|
|
+- ``kvm-steal-time``
|
|
|
|
+- ``kvm-pv-eoi``
|
|
|
|
+- ``kvmclock-stable-bit``
|
|
|
|
+
|
|
|
|
+``kvm-msi-ext-dest-id`` feature is enabled by default in x2apic mode with split
|
|
|
|
+irqchip (e.g. "-machine ...,kernel-irqchip=split -cpu ...,x2apic").
|
|
|
|
+
|
|
|
|
+Note: when CPU model ``host`` is used, QEMU passes through all supported
|
|
|
|
+paravirtualized ``KVM`` features to the guest.
|
|
|
|
+
|
|
|
|
+Existing features
|
|
|
|
+-----------------
|
|
|
|
+
|
|
|
|
+``kvmclock``
|
|
|
|
+ Expose a ``KVM`` specific paravirtualized clocksource to the guest. Supported
|
|
|
|
+ since Linux v2.6.26.
|
|
|
|
+
|
|
|
|
+``kvm-nopiodelay``
|
|
|
|
+ The guest doesn't need to perform delays on PIO operations. Supported since
|
|
|
|
+ Linux v2.6.26.
|
|
|
|
+
|
|
|
|
+``kvm-mmu``
|
|
|
|
+ This feature is deprecated.
|
|
|
|
+
|
|
|
|
+``kvm-asyncpf``
|
|
|
|
+ Enable asynchronous page fault mechanism. Supported since Linux v2.6.38.
|
|
|
|
+ Note: since Linux v5.10 the feature is deprecated and not enabled by ``KVM``.
|
|
|
|
+ Use ``kvm-asyncpf-int`` instead.
|
|
|
|
+
|
|
|
|
+``kvm-steal-time``
|
|
|
|
+ Enable stolen (when guest vCPU is not running) time accounting. Supported
|
|
|
|
+ since Linux v3.1.
|
|
|
|
+
|
|
|
|
+``kvm-pv-eoi``
|
|
|
|
+ Enable paravirtualized end-of-interrupt signaling. Supported since Linux
|
|
|
|
+ v3.10.
|
|
|
|
+
|
|
|
|
+``kvm-pv-unhalt``
|
|
|
|
+ Enable paravirtualized spinlocks support. Supported since Linux v3.12.
|
|
|
|
+
|
|
|
|
+``kvm-pv-tlb-flush``
|
|
|
|
+ Enable paravirtualized TLB flush mechanism. Supported since Linux v4.16.
|
|
|
|
+
|
|
|
|
+``kvm-pv-ipi``
|
|
|
|
+ Enable paravirtualized IPI mechanism. Supported since Linux v4.19.
|
|
|
|
+
|
|
|
|
+``kvm-poll-control``
|
|
|
|
+ Enable host-side polling on HLT control from the guest. Supported since Linux
|
|
|
|
+ v5.10.
|
|
|
|
+
|
|
|
|
+``kvm-pv-sched-yield``
|
|
|
|
+ Enable paravirtualized sched yield feature. Supported since Linux v5.10.
|
|
|
|
+
|
|
|
|
+``kvm-asyncpf-int``
|
|
|
|
+ Enable interrupt based asynchronous page fault mechanism. Supported since Linux
|
|
|
|
+ v5.10.
|
|
|
|
+
|
|
|
|
+``kvm-msi-ext-dest-id``
|
|
|
|
+ Support 'Extended Destination ID' for external interrupts. The feature allows
|
|
|
|
+ to use up to 32768 CPUs without IRQ remapping (but other limits may apply making
|
|
|
|
+ the number of supported vCPUs for a given configuration lower). Supported since
|
|
|
|
+ Linux v5.10.
|
|
|
|
+
|
|
|
|
+``kvmclock-stable-bit``
|
|
|
|
+ Tell the guest that guest visible TSC value can be fully trusted for kvmclock
|
|
|
|
+ computations and no warps are expected. Supported since Linux v2.6.35.
|
|
|
|
+
|
|
|
|
+Supplementary features
|
|
|
|
+----------------------
|
|
|
|
+
|
|
|
|
+``kvm-pv-enforce-cpuid``
|
|
|
|
+ Limit the supported paravirtualized feature set to the exposed features only.
|
|
|
|
+ Note, by default, ``KVM`` allows the guest to use all currently supported
|
|
|
|
+ paravirtualized features even when they were not announced in guest visible
|
|
|
|
+ CPUIDs. Supported since Linux v5.10.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Useful links
|
|
|
|
+------------
|
|
|
|
+
|
|
|
|
+Please refer to Documentation/virt/kvm in Linux for additional details.
|