[libvirt] PATCH: Be more flexible in emulator choice on x86 archs

Daniel Veillard veillard at redhat.com
Fri Mar 20 10:57:24 UTC 2009


On Mon, Mar 16, 2009 at 06:03:59PM +0000, Daniel P. Berrange wrote:
> Currently we are pretty strict about what emulator binary we allow for
> QEMU guests on x86 arches. In particular, for arch+domain type combos:
> 
>  - i686+qemu must use 'qemu' binary
>  - x86_64+qemu must use 'qemu-system-x86_64' binary
>  - kvm must use 'qemu-kvm' or 'kvm' binaries
>  - i686+kvm on x86_64 host is not allowed
> 
> These restrictions are overkill because
> 
>  - i686+qemu could use 'qemu-system-x86_64' if '-cpu qemu32' is added
>  - i686+qemu could use 'qemu-kvm' if '-cpu qemu32 -no-kvm' is added
>  - x86_64+qemu could use 'qemu-kvm' if '-no-kvm' is added
>  - i686+kvm on x86_64 host can be used if '-cpu qemu32' is added
> 
> This patch makes QEMU driver more flexible in this way when setting up
> its capabilities information. It also makes it aware of the -no-kvm
> and -cpu flag, using them where required by the os type + arch + emulator
> combinations specified in the guest XML.
> 
> This should finally remove the confusion where a user in virt-manager
> selectrs 'i686' and then wonders why we've disallowed choice of 'kvm'.
> It also fixes 'virsh version' when only qemu-kvm is installed.
> 
> The matrix should now work thus:
> 
> 1. qemu, qemu-system-x86_64, qemu-kvm all available
> 
>      qemu+i686   => qemu
>      qemu+x86_64 => qemu-system-x86_64
>      kvm+i686    => qemu-kvm -cpu qemu32
>      kvm+x86_64  => qemu-kvm
> 
> 2. qemu, qemu-kvm available
> 
>      qemu+i686   => qemu
>      qemu+x86_64 => qemu-kvm -no-kvm
>      kvm+i686    => qemu-kvm -cpu qemu32
>      kvm+x86_64  => qemu-kvm
> 
> 3. qemu-system-x86_64, qemu-kvm available
> 
>      qemu+i686   => qemu-system-x86_64 -cpu qemu32
>      qemu+x86_64 => qemu-system-x86_64
>      kvm+i686    => qemu-kvm -cpu qemu32
>      kvm+x86_64  => qemu-kvm
> 
> 4. qemu-kvm available
> 
>      qemu+i686   => qemu-kvm -no-kvm -cpu qemu32
>      qemu+x86_64 => qemu-kvm -no-kvm
>      kvm+i686    => qemu-kvm -cpu qemu32
>      kvm+x86_64  => qemu-kvm
> 
> 
> The only real remaining problem is that we don't cope with scenario
> where the KVM enabled binary is called 'qemu-system-x64_64' instead
> of 'qemu-kvm' or 'kvm'.

  The confusion around this deserve a patch, and that sounds one way
to get this solved ... but I find the approach "here is a hard coded
path", then "oh we finally need to add a second hardcoded path" a bit
worrying. This also doesn't cope with the occasional troubles where
people have a binary outside of /usr/bin. Maybe some of this logic could
be reduced and relying on configuration data would allow a fully
flexible system (where the user can bite himself too, but heh), by
suggesting architecture emulation binary names (with the above as
the default) and a separate path list to lookup those binaries.
Or we could just allow symlinks to be set in /usr/local/bin
pointing to whatever the binaries names may be on that system or
something approaching.

  But ACK, as is this solves the problem,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list