Documentation/Platforms/POWER
This page lists some information about running POWER Linux guests with QEMU (aka. sPAPR / pSeries / System p guests). You can select this machine type by running qemu-system-ppc64 with the "-M pseries
" option (or simply omit the machine option since it is currently the default for the qemu-system-ppc64 binary).
sPAPR devices
The sPAPR specification defines a set of para-virtualized devices, which are also supported by the pseries machine in QEMU and can be instantiated with the -device
option:
- spapr-vlan : A virtual network interface
- spapr-vscsi : A virtual SCSI disk interface
- spapr-rng : A pseudo-device for passing random number generator data to the guest (see the H_RANDOM hypercall feature for details)
However, since these devices have originally been specified with another hypervisor and non-Linux guests in mind, you should use the virtio counterparts (virtio-net, virtio-blk/scsi and virtio-rng) if possible instead, since they might give you much better performance with Linux guests.
Switching between the KVM-PR and KVM-HV kernel module
Currently, there are two implementations of KVM on POWER, kvm_hv.ko and kvm_pr.ko:
- KVM-PR:
- Uses the so-called "PRoblem state" of the ppc CPUs to run the guests, i.e. the VM is run in user mode and all privileged instructions trap and have to be emulated by the host.
- Guests that use a lot of privileged instructions are running quite slow this way...
- ... but the benefit is that this kernel module should run on pretty much every PPC hardware, and is able to emulate a lot of guest CPUs.
- Can also be used to run other PowerPC guests like an emulated PowerMac.
- KVM-HV:
- Requires hardware support of modern POWER server CPUs (like the recent POWER7/POWER8 CPUs).
- Guests that use a lot of privileged instructions are running much faster than with KVM-PR.
- The guest CPU has to be very similar to the host CPU this way (e.g. you can not specify an embedded PPC CPU for the guest with KVM-HV).
- Can only be used to run sPAPR (pseries) guests.
If your host supports both KVM modes, and both KVM kernel modules are loaded, you can switch between the two modes with the "kvm-type" parameter:
- Use "
qemu-system-ppc64 -M pseries,kvm-type=PR
" to use the kvm_pr.ko kernel module. - Use "
qemu-system-ppc64 -M pseries,kvm-type=HV
" to use kvm_hv.ko instead.