| ======================================================= |
| Configure DevStack with KVM-based Nested Virtualization |
| ======================================================= |
| |
| When using virtualization technologies like KVM, one can take advantage |
| of "Nested VMX" (i.e. the ability to run KVM on KVM) so that the VMs in |
| cloud (Nova guests) can run relatively faster than with plain QEMU |
| emulation. |
| |
| Kernels shipped with Linux distributions doesn't have this enabled by |
| default. This guide outlines the configuration details to enable nested |
| virtualization in KVM-based environments. And how to setup DevStack |
| (that'll run in a VM) to take advantage of this. |
| |
| |
| Nested Virtualization Configuration |
| =================================== |
| |
| Configure Nested KVM for Intel-based Machines |
| --------------------------------------------- |
| |
| Procedure to enable nested KVM virtualization on Intel-based machines. |
| |
| Check if the nested KVM Kernel parameter is enabled: |
| |
| :: |
| |
| cat /sys/module/kvm_intel/parameters/nested |
| N |
| |
| Temporarily remove the KVM intel Kernel module, enable nested |
| virtualization to be persistent across reboots and add the Kernel |
| module back: |
| |
| :: |
| |
| sudo rmmod kvm-intel |
| sudo sh -c "echo 'options kvm-intel nested=y' >> /etc/modprobe.d/dist.conf" |
| sudo modprobe kvm-intel |
| |
| Ensure the Nested KVM Kernel module parameter for Intel is enabled on |
| the host: |
| |
| :: |
| |
| cat /sys/module/kvm_intel/parameters/nested |
| Y |
| |
| modinfo kvm_intel | grep nested |
| parm: nested:bool |
| |
| Start your VM, now it should have KVM capabilities -- you can verify |
| that by ensuring ``/dev/kvm`` character device is present. |
| |
| |
| Configure Nested KVM for AMD-based Machines |
| ------------------------------------------- |
| |
| Procedure to enable nested KVM virtualization on AMD-based machines. |
| |
| Check if the nested KVM Kernel parameter is enabled: |
| |
| :: |
| |
| cat /sys/module/kvm_amd/parameters/nested |
| 0 |
| |
| |
| Temporarily remove the KVM AMD Kernel module, enable nested |
| virtualization to be persistent across reboots and add the Kernel module |
| back: |
| |
| :: |
| |
| sudo rmmod kvm-amd |
| sudo sh -c "echo 'options amd nested=1' >> /etc/modprobe.d/dist.conf" |
| sudo modprobe kvm-amd |
| |
| Ensure the Nested KVM Kernel module parameter for AMD is enabled on the |
| host: |
| |
| :: |
| |
| cat /sys/module/kvm_amd/parameters/nested |
| 1 |
| |
| modinfo kvm_amd | grep -i nested |
| parm: nested:int |
| |
| To make the above value persistent across reboots, add an entry in |
| /etc/modprobe.d/dist.conf so it looks as below:: |
| |
| cat /etc/modprobe.d/dist.conf |
| options kvm-amd nested=y |
| |
| |
| Expose Virtualization Extensions to DevStack VM |
| ----------------------------------------------- |
| |
| Edit the VM's libvirt XML configuration via ``virsh`` utility: |
| |
| :: |
| |
| sudo virsh edit devstack-vm |
| |
| Add the below snippet to expose the host CPU features to the VM: |
| |
| :: |
| |
| <cpu mode='host-passthrough'> |
| </cpu> |
| |
| |
| Ensure DevStack VM is Using KVM |
| ------------------------------- |
| |
| Before invoking ``stack.sh`` in the VM, ensure that KVM is enabled. This |
| can be verified by checking for the presence of the file ``/dev/kvm`` in |
| your VM. If it is present, DevStack will default to using the config |
| attribute ``virt_type = kvm`` in ``/etc/nova.conf``; otherwise, it'll fall |
| back to ``virt_type=qemu``, i.e. plain QEMU emulation. |
| |
| Optionally, to explicitly set the type of virtualization, to KVM, by the |
| libvirt driver in nova, the below config attribute can be used in |
| DevStack's ``local.conf``: |
| |
| :: |
| |
| LIBVIRT_TYPE=kvm |
| |
| |
| Once DevStack is configured successfully, verify if the Nova instances |
| are using KVM by noticing the QEMU CLI invoked by Nova is using the |
| parameter ``accel=kvm``, e.g.: |
| |
| :: |
| |
| ps -ef | grep -i qemu |
| root 29773 1 0 11:24 ? 00:00:00 /usr/bin/qemu-system-x86_64 -machine accel=kvm [. . .] |