1c1eaa6d0SDavid WoodhouseXen HVM guest support 2c1eaa6d0SDavid Woodhouse===================== 3c1eaa6d0SDavid Woodhouse 4c1eaa6d0SDavid Woodhouse 5c1eaa6d0SDavid WoodhouseDescription 6c1eaa6d0SDavid Woodhouse----------- 7c1eaa6d0SDavid Woodhouse 8c1eaa6d0SDavid WoodhouseKVM has support for hosting Xen guests, intercepting Xen hypercalls and event 9c1eaa6d0SDavid Woodhousechannel (Xen PV interrupt) delivery. This allows guests which expect to be 10c1eaa6d0SDavid Woodhouserun under Xen to be hosted in QEMU under Linux/KVM instead. 11c1eaa6d0SDavid Woodhouse 12*154eac37SDavid WoodhouseUsing the split irqchip is mandatory for Xen support. 13*154eac37SDavid Woodhouse 14c1eaa6d0SDavid WoodhouseSetup 15c1eaa6d0SDavid Woodhouse----- 16c1eaa6d0SDavid Woodhouse 17c1eaa6d0SDavid WoodhouseXen mode is enabled by setting the ``xen-version`` property of the KVM 18c1eaa6d0SDavid Woodhouseaccelerator, for example for Xen 4.10: 19c1eaa6d0SDavid Woodhouse 20c1eaa6d0SDavid Woodhouse.. parsed-literal:: 21c1eaa6d0SDavid Woodhouse 22*154eac37SDavid Woodhouse |qemu_system| --accel kvm,xen-version=0x4000a,kernel-irqchip=split 23c1eaa6d0SDavid Woodhouse 24c1eaa6d0SDavid WoodhouseAdditionally, virtual APIC support can be advertised to the guest through the 25c1eaa6d0SDavid Woodhouse``xen-vapic`` CPU flag: 26c1eaa6d0SDavid Woodhouse 27c1eaa6d0SDavid Woodhouse.. parsed-literal:: 28c1eaa6d0SDavid Woodhouse 29*154eac37SDavid Woodhouse |qemu_system| --accel kvm,xen-version=0x4000a,kernel-irqchip=split --cpu host,+xen_vapic 30c1eaa6d0SDavid Woodhouse 31c1eaa6d0SDavid WoodhouseWhen Xen support is enabled, QEMU changes hypervisor identification (CPUID 32c1eaa6d0SDavid Woodhouse0x40000000..0x4000000A) to Xen. The KVM identification and features are not 33c1eaa6d0SDavid Woodhouseadvertised to a Xen guest. If Hyper-V is also enabled, the Xen identification 34c1eaa6d0SDavid Woodhousemoves to leaves 0x40000100..0x4000010A. 35c1eaa6d0SDavid Woodhouse 36c1eaa6d0SDavid WoodhouseThe Xen platform device is enabled automatically for a Xen guest. This allows 37c1eaa6d0SDavid Woodhousea guest to unplug all emulated devices, in order to use Xen PV block and network 38*154eac37SDavid Woodhousedrivers instead. Under Xen, the boot disk is typically available both via IDE 39*154eac37SDavid Woodhouseemulation, and as a PV block device. Guest bootloaders typically use IDE to load 40*154eac37SDavid Woodhousethe guest kernel, which then unplugs the IDE and continues with the Xen PV block 41*154eac37SDavid Woodhousedevice. 42*154eac37SDavid Woodhouse 43*154eac37SDavid WoodhouseThis configuration can be achieved as follows 44*154eac37SDavid Woodhouse 45*154eac37SDavid Woodhouse.. parsed-literal:: 46*154eac37SDavid Woodhouse 47*154eac37SDavid Woodhouse |qemu_system| -M pc --accel kvm,xen-version=0x4000a,kernel-irqchip=split \\ 48*154eac37SDavid Woodhouse -drive file=${GUEST_IMAGE},if=none,id=disk,file.locking=off -device xen-disk,drive=disk,vdev=xvda \\ 49*154eac37SDavid Woodhouse -drive file=${GUEST_IMAGE},index=2,media=disk,file.locking=off,if=ide 50*154eac37SDavid Woodhouse 51*154eac37SDavid WoodhouseIt is necessary to use the pc machine type, as the q35 machine uses AHCI instead 52*154eac37SDavid Woodhouseof legacy IDE, and AHCI disks are not unplugged through the Xen PV unplug 53*154eac37SDavid Woodhousemechanism. 54*154eac37SDavid Woodhouse 55*154eac37SDavid WoodhouseVirtIO devices can also be used; Linux guests may need to be dissuaded from 56*154eac37SDavid Woodhouseumplugging them by adding 'xen_emul_unplug=never' on their command line. 57c1eaa6d0SDavid Woodhouse 58c1eaa6d0SDavid WoodhouseProperties 59c1eaa6d0SDavid Woodhouse---------- 60c1eaa6d0SDavid Woodhouse 61c1eaa6d0SDavid WoodhouseThe following properties exist on the KVM accelerator object: 62c1eaa6d0SDavid Woodhouse 63c1eaa6d0SDavid Woodhouse``xen-version`` 64c1eaa6d0SDavid Woodhouse This property contains the Xen version in ``XENVER_version`` form, with the 65c1eaa6d0SDavid Woodhouse major version in the top 16 bits and the minor version in the low 16 bits. 66c1eaa6d0SDavid Woodhouse Setting this property enables the Xen guest support. 67c1eaa6d0SDavid Woodhouse 68c1eaa6d0SDavid Woodhouse``xen-evtchn-max-pirq`` 69c1eaa6d0SDavid Woodhouse Xen PIRQs represent an emulated physical interrupt, either GSI or MSI, which 70c1eaa6d0SDavid Woodhouse can be routed to an event channel instead of to the emulated I/O or local 71c1eaa6d0SDavid Woodhouse APIC. By default, QEMU permits only 256 PIRQs because this allows maximum 72c1eaa6d0SDavid Woodhouse compatibility with 32-bit MSI where the higher bits of the PIRQ# would need 73c1eaa6d0SDavid Woodhouse to be in the upper 64 bits of the MSI message. For guests with large numbers 74c1eaa6d0SDavid Woodhouse of PCI devices (and none which are limited to 32-bit addressing) it may be 75c1eaa6d0SDavid Woodhouse desirable to increase this value. 76c1eaa6d0SDavid Woodhouse 77c1eaa6d0SDavid Woodhouse``xen-gnttab-max-frames`` 78c1eaa6d0SDavid Woodhouse Xen grant tables are the means by which a Xen guest grants access to its 79c1eaa6d0SDavid Woodhouse memory for PV back ends (disk, network, etc.). Since QEMU only supports v1 80c1eaa6d0SDavid Woodhouse grant tables which are 8 bytes in size, each page (each frame) of the grant 81c1eaa6d0SDavid Woodhouse table can reference 512 pages of guest memory. The default number of frames 82c1eaa6d0SDavid Woodhouse is 64, allowing for 32768 pages of guest memory to be accessed by PV backends 83c1eaa6d0SDavid Woodhouse through simultaneous grants. For guests with large numbers of PV devices and 84c1eaa6d0SDavid Woodhouse high throughput, it may be desirable to increase this value. 85c1eaa6d0SDavid Woodhouse 86c1eaa6d0SDavid WoodhouseOS requirements 87c1eaa6d0SDavid Woodhouse--------------- 88c1eaa6d0SDavid Woodhouse 89c1eaa6d0SDavid WoodhouseThe minimal Xen support in the KVM accelerator requires the host to be running 90c1eaa6d0SDavid WoodhouseLinux v5.12 or newer. Later versions add optimisations: Linux v5.17 added 91c1eaa6d0SDavid Woodhouseacceleration of interrupt delivery via the Xen PIRQ mechanism, and Linux v5.19 92c1eaa6d0SDavid Woodhouseaccelerated Xen PV timers and inter-processor interrupts (IPIs). 93