xref: /qemu/docs/system/i386/xen.rst (revision 154eac37190c4d80d29b09c226abd899e397530f)
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