From ec38a9b641108bba14f8be1c71c50cc85e6f9f86 Mon Sep 17 00:00:00 2001 From: Robert Yang Date: Thu, 25 Jun 2015 01:56:03 -0700 Subject: runqemu: enable kvm when use tap under sudo Enable kvm support automatically when use tap interface under sudo, the thought is, if sudo works well, and qemu-native has been built with kvm support, and kvm can be enabled, then enable it, it can be disabled by nokvm option. The previous command: $ runqemu qemux86 kvm may not work since it checks the current user's read/write permission on /dev/kvm and /dev/vhost-net but failed without sudo, it can't use sudo to check them since sudo is not a must, sudo is only required when need create tap interface, this patch can enable it automatically. Enable kvm can improve qemu's performance a lot, when test perl-5.22's lib/warnings.t on qemux86-64, 70 times improved. Signed-off-by: Robert Yang --- scripts/runqemu | 9 +++++++-- scripts/runqemu-internal | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/runqemu b/scripts/runqemu index 78dfd1a047..01f6cbff97 100755 --- a/scripts/runqemu +++ b/scripts/runqemu @@ -33,6 +33,7 @@ usage() { echo " nographic - disables video console" echo " serial - enables a serial console on /dev/ttyS0" echo " kvm - enables KVM when running qemux86/qemux86-64 (VT-capable CPU required)" + echo " nokvm - disables KVM" echo " publicvnc - enable a VNC server open to all hosts" echo " qemuparams=\"xyz\" - specify custom parameters to QEMU" echo " bootparams=\"xyz\" - specify custom kernel parameters during boot" @@ -68,8 +69,10 @@ SCRIPT_QEMU_OPT="" SCRIPT_QEMU_EXTRA_OPT="" SCRIPT_KERNEL_OPT="" SERIALSTDIO="" -KVM_ENABLED="no" +KVM_ENABLED="maybe" +KVM_CAPABLE="`grep -q 'vmx\|svm' /proc/cpuinfo && echo 1`" KVM_ACTIVE="no" +KVM_SUDO="" GRAPHIC="yes" PUBLICVNC="no" @@ -181,7 +184,9 @@ while true; do ;; "kvm") KVM_ENABLED="yes" - KVM_CAPABLE=`grep -q 'vmx\|svm' /proc/cpuinfo && echo 1` + ;; + "nokvm") + KVM_ENABLED="no" ;; "slirp") SLIRP_ENABLED="yes" diff --git a/scripts/runqemu-internal b/scripts/runqemu-internal index 694815fb74..25533ecef5 100755 --- a/scripts/runqemu-internal +++ b/scripts/runqemu-internal @@ -217,6 +217,19 @@ else sudo $QEMUIFUP $USERID $GROUPID $OECORE_NATIVE_SYSROOT return 1 fi + + # Enale kvm when possible since sudo works well, if + # /usr/include/linux/kvm.h exists, qemu-native is built with kvm + # support. + if [ "$KVM_ENABLED" = "maybe" -a -n "$KVM_CAPABLE" -a \ + -e /dev/kvm -a -e /dev/vhost-net -a -f /usr/include/linux/kvm.h ] && \ + [ "$MACHINE" = "qemux86" -o "$MACHINE" = "qemux86-64" ]; then + echo "Enabling KVM automatically, can be disabled by nokvm option" + SCRIPT_QEMU_OPT="$SCRIPT_QEMU_OPT -enable-kvm" + KVM_ACTIVE="yes" + KVM_SUDO="sudo" + fi + LOCKFILE="$LOCKDIR/$tap" echo "Acquiring lockfile for $tap..." acquire_lock $LOCKFILE @@ -685,6 +698,7 @@ if [ "x$SERIALSTDIO" = "x1" ]; then fi echo "Running $QEMU..." +[ -n "$KVM_SUDO" ] && QEMUBIN="$KVM_SUDO $QEMUBIN" # -no-reboot is a mandatory option - see bug #100 if [ "$FSTYPE" = "vmdk" ]; then echo $QEMUBIN $VM $QEMUOPTIONS $SERIALOPTS -no-reboot $SCRIPT_QEMU_OPT $SCRIPT_QEMU_EXTRA_OPT -- cgit 1.2.3-korg