How to enable KVM for Poky qemu

From Yocto Project
Jump to navigationJump to search

enable KVM for poky qemu

KVM introduction

KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V). It consists of a loadable kernel module, kvm.ko, that provides the core virtualization infrastructure and a processor specific module, kvm-intel.ko or kvm-amd.ko. KVM also requires a modified QEMU although work is underway to get the required changes upstream.

Compared with native qemu, a pure emulator, KVM has better performance based on virtualization as most of guest instruction can be executed directly on the host processor.

detect VT support

You need make sure your x86 processor support VT before using KVM.

With a recent enough Linux kernel, run the command:

$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

If something shows up, you have VT. You can also check the processor model name (in `/proc/cpuinfo`) in the vendor's web site.

Note:

  • You'll never see (vmx|svm) in /proc/cpuinfo if you're currently running in in a dom0 or domU. The Xen hypervisor suppresses these flags in order to prevent hijacking.
  • Some manufacturers disable VT in the machine's BIOS, in such a way that it cannot be re-enabled.
  • `/proc/cpuinfo` only shows virtualization capabilities starting with Linux 2.6.15 (Intel) and Linux 2.6.16 (AMD). Use the `uname -r` command to query your kernel version.

In case of doubt, contact your hardware vendor.

get the KVM module

The quick & easy way for this is just using it from your distribution. As of now, all major community and enterprise distributions contain kvm kernel modules; these are either installed by default or require installing a kvm package. For someone looking for stability, these are the best choice. No effort is needed to build or install the modules, support is provided by the distribution, and the distribution/module combination is well tested.

In other cases, you need refer getting kvm modules.

After getting the modules, you can install them into kernel by

$ sudo modprobe kvm-intel

make KVM aware QEMU

Upstream QEMU has already supported KVM, and I have already checked in one patch to enable it. So you get a KVM capable qemu after poky build.

Change the kvm dev ownership for non-root user

qemu is started as non-root user in poky, but /dev/kvm from some distribution remains root:root that only allow root to use KVM. To work around this, we need create a new group named kvm, and make both /dev/kvm and the non-root user belongs to it.

sudo groupadd --system kvm
sudo gpasswd -a $USER kvm
sudo chown root:kvm /dev/kvm
sudo chmod 0660 /dev/kvm

The output of "ls -l /dev/kvm" should be like this:

crw-rw----+ 1 root kvm 10, 232 2010-07-02 09:27 /dev/kvm

On a system that runs udev, you will probably need to add the following line somewhere in your udev configuration so it will automatically give the right group to the newly created device (i-e for ubuntu add a line to /etc/udev/rules.d/40-permissions.rules).

KERNEL=="kvm", GROUP="kvm", MODE="0660"


Note

  • You need log out then log in the non-root user to take the effect
  • Some distributions have already made this, so that we can skip this step

running qemu with KVM enabled

just append "kvm" parameter to the runqemu like this

$ runqemu qemux86 kvm