Documentation/Platforms/POWER: Difference between revisions

From QEMU
(Added a section about sPAPR devices)
(Some notes about nested virtualization)
Line 20: Line 20:
#* ... 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.
#* ... 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.
#* Can also be used to run other PowerPC guests like an emulated PowerMac.
#* Can be used for nested virtualization (i.e. running a guest from within a guest)
# KVM-HV:
# KVM-HV:
#* Requires hardware support of modern POWER server CPUs (like the recent POWER7/POWER8 CPUs).
#* Requires hardware support of modern POWER server CPUs (like the recent POWER7/POWER8 CPUs).
Line 25: Line 26:
#* 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).
#* 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.
#* Can only be used to run sPAPR (pseries) guests.
#* Can not be used for nested virtualization (but you can still run the kvm-pr kernel module in a kvm-hv guest to get nested virtualization)


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:
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:

Revision as of 07:54, 4 April 2016

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:

  1. 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.
    • Can be used for nested virtualization (i.e. running a guest from within a guest)
  2. 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.
    • Can not be used for nested virtualization (but you can still run the kvm-pr kernel module in a kvm-hv guest to get nested virtualization)

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.

Links