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:
kvmclockkvm-nopiodelaykvm-asyncpfkvm-steal-timekvm-pv-eoikvmclock-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
kvmclockExpose a
KVMspecific paravirtualized clocksource to the guest. Supported since Linux v2.6.26.kvm-nopiodelayThe guest doesn’t need to perform delays on PIO operations. Supported since Linux v2.6.26.
kvm-mmuThis feature is deprecated.
kvm-asyncpfEnable asynchronous page fault mechanism. Supported since Linux v2.6.38. Note: since Linux v5.10 the feature is deprecated and not enabled by
KVM. Usekvm-asyncpf-intinstead.kvm-steal-timeEnable stolen (when guest vCPU is not running) time accounting. Supported since Linux v3.1.
kvm-pv-eoiEnable paravirtualized end-of-interrupt signaling. Supported since Linux v3.10.
kvm-pv-unhaltEnable paravirtualized spinlocks support. Supported since Linux v3.12.
kvm-pv-tlb-flushEnable paravirtualized TLB flush mechanism. Supported since Linux v4.16.
kvm-pv-ipiEnable paravirtualized IPI mechanism. Supported since Linux v4.19.
kvm-poll-controlEnable host-side polling on HLT control from the guest. Supported since Linux v5.10.
kvm-pv-sched-yieldEnable paravirtualized sched yield feature. Supported since Linux v5.10.
kvm-asyncpf-intEnable interrupt based asynchronous page fault mechanism. Supported since Linux v5.10.
kvm-msi-ext-dest-idSupport ‘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-bitTell 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-cpuidLimit the supported paravirtualized feature set to the exposed features only. Note, by default,
KVMallows 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.