[OE-core] [PATCH 2/2] runqemu: enable kvm when use tap under sudo
Robert Yang
liezhi.yang at windriver.com
Thu Jun 25 09:41:09 UTC 2015
On 06/25/2015 05:24 PM, Robert Yang wrote:
> 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 <liezhi.yang at windriver.com>
> ---
> scripts/runqemu | 9 +++++++--
> scripts/runqemu-internal | 15 +++++++++++++++
> 2 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/runqemu b/scripts/runqemu
> index d9e91af..926d76e 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"
>
> # Determine whether the file is a kernel or QEMU image, and set the
> @@ -180,7 +183,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 694815f..91385ba 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
> @@ -237,6 +250,7 @@ else
> echo "Releasing lockfile of preconfigured tap device '$TAP'"
> release_lock $LOCKFILE
>
> +
Sorry, I removed this blank line in the repo.
// Robert
> if [ "$NFSRUNNING" = "true" ]; then
> echo "Shutting down the userspace NFS server..."
> echo "runqemu-export-rootfs stop $ROOTFS"
> @@ -685,6 +699,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
>
More information about the Openembedded-core
mailing list