Authors:

Feature pages are design documents that developers have created while collaborating on oVirt.

Most of them are outdated, but provide historical design context.

They are not user documentation and should not be treated as such.

Documentation is available here.

ppc64le Support

Summary

This feature adds full support for ppc64le platform. Most of the requirements are already implemented by VDSM’s support.

Owner

  • name: Martin Polednik (Martin Polednik)

Current Status

  • Released in oVirt 3.6

Requirements

  • ppc64le machine - currently supported is POWER8
  • RHEL 7.2 (ppc64le)

Differences Between ppc64le and x86_64

Most of the differences are already solved by lower components of the stack. That said, there are several details that are not abstracted at all. In order to overcome these issues, VDSM must take care of gathering the information from sources relevant for the platform and Engine must use them adequately.

Hardware Info

Device Tree

First difference is hardware information. On x86_64, we use dmidecode to read the low level system information. POWER8 lacks DMI table at all, but another structure - device tree - is used. There are several keys in our info structure, such as system-id, model-name and vendor. Using device-tree to obtain them is possibly via procfs:

# cat /proc/device-tree/system-id
<value>
# cat /proc/device-tree/model-name
IBM Power System S822L
# cat /proc/device-tree/vendor
IBM

Similar information found in dmidecode:

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: HP
        Product Name: ProLiant DL160 G6
        Version:
        Serial Number: <value>
        UUID: <value>
        Wake-up Type: Power Switch
        SKU Number: <value>
        Family:

Different cpuinfo Format

The fields in cpuinfo have different values. Following table displays how x86_64 fields map to ppc64le fields.

'flags'      -> __not there __
'cpu MHz'    -> 'clock'
'model name' -> 'cpu'

Cpu Flags

Libvirt uses notion of baseline CPUs for x86_64, meaning that the model of CPU is mapped by it’s flags to a closest baseline subset of these flags. This does not apply for ppc64le where no flags are reported. Since there are data passed in the flags field other then flags (supported baseline CPUs), we use an arbitrary flag powernv. The machine type is then read from libvirt’s capabilities XML in a same way as on x86_64.

Machine Type Differences

Graphics

Various constraints must be considered when launching ppc64le VM. Most notably the SPICE is not supported, therefore VNC (with virtio-vga video) must be used.

CPU

The libvirt CPU format for ppc64le is quite different from ppc64le. Relevant information is that POWER8 is a magic constant in qemu, meaning ‘select the most appropriate CPU for the host’. This is achieved by following XML. Also note that this mode currently allows migration between POWER8 hosts in the same cluster.

<cpu>
    <model>POWER8</model>
</cpu>

Using host-model is reserved for POWER compatibility modes. These are not used within VDSM.

<cpu mode="host-model">
    <model>POWER7</model>
</cpu>

Input

ppc64le uses USB instead of PS2 for mouse. Since the preferred way of interacting with VM is using absolute pointing device (tablet) that is USB on both platforms, this is mostly a fallback.

SMBIOS

Not relevant for ppc64le at all.

Updating firmware from the OS

The following instructions are taken from IBM’s public wiki. This manual covers update from inside of the OS, no HMC or any other tools available.

  • 1) Determine the model, serial number and firmware version(?) of the machine.
# cat /proc/cpuinfo  | grep model
model           : 8247-22L

# cat /proc/device-tree/system-id
<serial number>

# lsmcode | awk '{print $6}'
FW810.33
  • 2) Enter the information obtained in 1) at http://www-933.ibm.com/support/fixcentral/ and download the firmware version requested. The only required part is the rpm.
  • 3) Install the rpm. The firmware image can be located at /tmp/fwupdate.
# rpm -Uvh --ignoreos 01SV810_133_081.rpm

Preparing...                          ################################# [100%]
Updating / installing...
   1:01SV810_133_081-1.1-1            ################################# [100%]
  • 4) Verify the firmware.
# update_flash -v -f /tmp/fwupdate/01SV810_133_081.img
info: Current Temporary side will be committed to
Permanent side before being replaced with the new
image.

Projected Flash Update Results:
Current T Image: SV810_133
Current P Image: SV810_081
New T Image:     SV810_133
New P Image:     SV810_133
  • 5) If everything seems correct, update the firmware.
# update_flash -f /tmp/fwupdate/01SV810_133_081.img
  • 6) The script will reboot the machine and update the firmware. Do not do anything, wait for the process to finish.
  • 7) The system will eventually boot up. After using it with the new firmware, decide whether to move the image to permanent firmware memory (erasing the previous version).

To move from temporary to permanent memory: update_flash -c
To revert the temporary flash update: update_flash -r

FakeKVM / faqemu

There are few issues with FakeKVM. Faqemu should work fine. TBD: fakearch to fix these.

Final Goal

Allow users to use POWER8 in oVirt with only minimal differences to x86_64.