[libvirt] CPU type/flags when converting a physical machine to run on libvirt
Eduardo Habkost
ehabkost at redhat.com
Fri May 2 18:53:31 UTC 2014
CCing Cole, as he had to deal with libvirt and "host-cpu" before, and
may have some comments about the bugs he has found.
On Fri, May 02, 2014 at 01:07:05PM +0100, Richard W.M. Jones wrote:
> I'm in the process of rewriting virt-p2v which is our program for
> converting physical machines to become virtual machines, running on
> top of libvirt + KVM.
>
> The physical machine has certain characteristics -- eg:
>
> - number of physical cores
> - amount of RAM
> - CPU type (eg. AMD Opteron, Intel Core i7)
> - CPU flags (eg. ACPI, SSE4)
>
> which it might make sense to reflect in the libvirt XML of the virtual
> machine we create.
>
> The old version of virt-p2v is pretty simplistic about this. It
> generates *only* an i386 or x86-64 VM, and the only flags it considers
> are 'apic', 'acpi', 'pae' and 'lm' [the latter to distinguish between
> 32 and 64 bit x86].
>
> What should the new version do?
>
> Particular questions:
>
> - Should we try to reflect the CPU type of the physical machine in
> the virtual machine? eg. If it's an Opteron, we generate an
> Opteron target machine. (I believe the answer is *no*, because
> this is not live migration, and most guests can boot on any
> compatible CPU).
I see no reason to _not_ choose Opteron_Gx, if you know the host CPU is
always going to be an Opteron_Gx.
If the user simply plans to convert an existing physical machine to a
single-VM machine and has no plans to ever migrate the VM, it makes
sense to use "-cpu host" (but beware: this may uncover a few QEMU bugs).
if the user plans to migrate the VM to a _similar_ host later, it makes
sense to use an existing CPU model name that matches the host CPU (see
"host-cpu-model" below).
If the user plans to migrate the VM to a very different host later it
makes sense to be more conservative and simply use the default CPU
model.
In other words: I don't know what's a good default because I don't know
your use case very well.
>
> - How can I ask libvirt to give me the best possible CPU, and not
> some baseline? Normally I use host-model, but I think that
> prevents migration.
The best possible CPU is "-cpu host" (host-passthrough in libvirt), but
that doesn't allow migration. This may uncover QEMU bugs (but it is much
better today than it was 1 or 2 years ago).
The best possible CPU which allows migration is the one you get when
explicitly asking libvirt to expand host-model (including baseline +
flags). This is likely to uncover QEMU and libvirt bugs.
A safer option is to use only the base CPU model (not the additional
flags) provided by libvirt when asking about the host CPU model (I
believe this is called "host-cpu-model" on virt-manager code).
>
> - What CPU flags should be reflected in the target libvirt XML?
>
> - Is it worth modelling CPU thread layout? (I suspect this will be a
> lot of work with the potential to break things rather than provide
> any measurable benefits.)
I wouldn't recommend this unless: 1) you know the VM will be kept
running in the same host or on a similar host; 2) you pin the
VCPUs/threads to corresponding host CPUs/threads.
This may also uncover QEMU bugs, so I wouldn't do this by default unless
the user explicitly asks for it.
>
> - Is there anything else I haven't thought about?
In the future you may want to support multi-node NUMA VMs. This is
similar to the multi-core/multi-thread case: it makes sense if you know
the VM is going to run on a host with similar topology, and if you
manually pin the guest nodes to the host nodes (something which is not
possible yet, but should be possible in the near future).
>
> However the overriding rule is:
>
> - We *must not* end up with a target virtual machine which doesn't work!
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> virt-p2v converts physical machines to virtual machines. Boot with a
> live CD or over the network (PXE) and turn machines into KVM guests.
> http://libguestfs.org/virt-v2v
--
Eduardo
More information about the libvir-list
mailing list