[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