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