On Feb 8, 2013, at 3:07 PM, Wido den Hollander <w...@widodh.nl> wrote:
> Hi, > > On 02/08/2013 10:34 AM, Dave Cahill wrote: >> Hi, >> >> Recently I encountered two "nested virtualization" use cases which made me >> want QEMU hypervisor support in CloudStack. I'm interested to hear if >> anyone else is interested in this feature, and any notes on how it should >> be implemented. >> >> Here is a good explanation from OpenStack docs [2] on why they support QEMU: >> "From the perspective of the Compute service, the QEMU hypervisor is very >> similar to the KVM hypervisor. Both are controlled through libvirt, both >> support the same feature set, and all virtual machine images that are >> compatible with KVM are also compatible with QEMU. The main difference is >> that QEMU does not support native virtualization. Consequently, QEMU has >> worse performance than KVM and is a poor choice for a production >> deployment." >> > > So, I've been reading into the code and found this on my Ubuntu systems. > > root@stack01:~# ls -l /usr/bin/kvm > lrwxrwxrwx 1 root root 18 Oct 4 02:44 /usr/bin/kvm -> qemu-system-x86_64 > root@stack01:~# > > Imho Qemu is Qemu and KVM only comes into play when the kernel module 'kvm' > and 'kvm_amd' or 'kvm_intel' is loaded. > >> Here are the use cases I encountered: >> >> [Use case: Dev environment] >> Wanted to use Vagrant [1] to create a portable multi-node dev >> environment; however Vagrant uses VirtualBox, which doesn't support KVM. >> Also, devcloud uses VirtualBox and devcloud-kvm uses kvm-within-kvm. I >> imagine maintenance of devcloud and devcloud-kvm would be easier if >> devcloud-kvm could use VirtualBox too. >> Note: Of course, I'm aware of devcloud-kvm as an alternative for this >> use case, and I'll be looking into that next. >> >> [Use case: Demo environment] >> We may want to spin up a multi-node CloudStack install in Amazon AWS >> for demo purposes. >> Again, AWS instances don't support KVM, so this is not possible without >> QEMU support. >> >> [Implementation ideas] >> The management server currently does a check for KVM support ("kvm-ok") >> on the host, and refuses to add the host if that fails. I think this check >> could be removed, as the agent setup scripts will fail anyway if the user >> is trying to setup a certain hypervisor on a machine which doesn't support >> it. > > This way you could do nested virtualization indeed, but it could also hurt > users who have their BIOS set to disabled and could lead to long debugging. > >> Create a new setting in agent.properties like "use_qemu", with a >> default of "false". If the person deploying CloudStack agent sets this to >> "true", cloud-setup-agent and other setup scripts would ignore lack of KVM >> support as long as QEMU support was available. > > cloud-setup-agent generates a agent.properties, so at that point it doesn't > know that the user intents to use the system without KVM support. > >> Lastly, when creating the libvirt XML file for a VM, set hypervisor to >> QEMU rather than KVM in the XML file depending on the config setting. >> > > That's not hard coded. The Agent does a getCapabilities() call to libvirt > which returns a list of possible emulators. > > /usr/bin/kvm is just one of them which is returned and matches the > architecture. > Wido, So can I add a "KVM" host that would in fact just use qemu ? How would I do that ? -sebastien > Wido > >> Thanks for reading, >> Dave. >> >> [1] http://www.vagrantup.com/ >> [2] >> http://docs.openstack.org/trunk/openstack-compute/install/yum/content/qemu.html >> >