KVM On Ubuntu - KVM Logo

KVM Migration Problems

I recently experienced some KVM migration problems while moving virtual machines from my development laptop to my server. The laptop has a Core i7 processor but the server is running a Core i5 and, as you might expect, they have different features available. In this article I’ll explain what I did to fix my KVM migration problems.

KVM Migration Problems – Unsupported Configuration

To perform the migration I was following the steps I’ve documented here and everything was going well until I came to start the moved machine. I was presented with the error message:

virsh start main
error: Failed to start domain main
error: unsupported configuration: guest and host CPU are not compatible: Host CPU does not provide required features: x2apic

X2APIC, it turns out, is an interrupt controller but that’s not terribly important as the processor I’m moving too apparently doesn’t have one – erm, it has an interrupt controller obviously just not this one. When I looked in the main.xml configuration file (found in /etc/libvirt/qemu) I was surprised by how little configuration there was for the CPU:

<cpu mode='custom' match='exact'>
    <model fallback='allow'>SandyBridge</model>

Now run the following command to determine what the capabilites of the target machine are – there’s quite a bit of output, CPU information is near the top:

virsh capabilities

    <topology sockets='1' cores='4' threads='1'/>
    <feature name='rdtscp'/>
    <feature name='avx'/>
    <feature name='osxsave'/>
    <feature name='xsave'/>
    <feature name='tsc-deadline'/>
    <feature name='pcid'/>
    <feature name='pdcm'/>
    <feature name='xtpr'/>
    <feature name='tm2'/>
    <feature name='est'/>
    <feature name='vmx'/>
    <feature name='ds_cpl'/>
    <feature name='monitor'/>
    <feature name='dtes64'/>
    <feature name='pclmuldq'/>
    <feature name='pbe'/>
    <feature name='tm'/>
    <feature name='ht'/>
    <feature name='ss'/>
    <feature name='acpi'/>
    <feature name='ds'/>
    <feature name='vme'/>

Now that you know what model of processor is in the target host machine edit the configuration file:

virsh edit main

so that the CPU configuration looks like this (yours will probably be different):

<cpu mode='custom' match='exact'>
    <model fallback='allow'>Westmere</model>

And restart your virtual machine…

Note: it’s also possible to make this change using Virtual Machine Manager. Open the virtual machine settings and under Processor > Configuration you’ll see a check box that will all you to copy the host CPU configuration.

KVM Migration Problems – Unsupported Machine Type

After fixing the CPU issue described above I then ran into this new KVM migration problem:

error: Failed to start domain main
error: internal error: process exited while connecting to monitor: qemu-system-x86_64: -machine pc-i440fx-utopic,accel=kvm,usb=off: Unsupported machine type
Use -machine help to list supported machines!

I initially installed this virtual machine on a host running Ubuntu 14.10 Utopic. It hadn’t occurred to me that the virtual machine would care what the host was running beyond the version of KVM / Qemu it was on. A scan though the configuration found this:

    <type arch='x86_64' machine='pc-i440fx-utopic'>hvm</type>
    <boot dev='hd'/>

As above I used “virsh edit main” to modify the configuration and changed “utopic” to “trusty” which is what the server is running. This was enough to get the virtual machine started.

Posted in Linux, Virtualization and tagged , , .