[Pkg-xen-devel] [PATCH 05/16] debian/scripts: Optimize runtime scripts
Hans van Kranenburg
hans at knorrie.org
Fri Jan 15 21:13:27 GMT 2021
On 9/21/20 6:28 AM, Elliott Mitchell wrote:
> Fewer fork()s and execve()s quickly add up to significant savings. I'm
> concerned Debian is slowly headed towards recreating SunOS^WSolaris
> 5.7^W2.7^W7 and the layers and layers of scripts which killed
> performance.
>
> As these runtime scripts are heavily used, avoid all uses of external
> programs by them.
>
> Signed-off-by: Elliott Mitchell <ehem+debian at m5p.com>
I particularly like the improved error messages, instead of just having
something explode in an ugly way.
Acked-by: Hans van Kranenburg <hans at knorrie.org>
> ---
> debian/scripts/xen-utils-wrapper | 43 +++++++++++++++++++++++++++++---
> debian/scripts/xen-version | 6 +++--
> 2 files changed, 43 insertions(+), 6 deletions(-)
>
> diff --git a/debian/scripts/xen-utils-wrapper b/debian/scripts/xen-utils-wrapper
> index 4d27a62d33..6247fd0b29 100755
> --- a/debian/scripts/xen-utils-wrapper
> +++ b/debian/scripts/xen-utils-wrapper
> @@ -1,6 +1,41 @@
> -#!/bin/sh -e
> +#!/bin/sh
>
> -COMMAND="$(basename $0)"
> -DIR=$(/usr/lib/xen-common/bin/xen-dir)
> +# This portion is fast-path, avoid external programs, NOTE: NOT -e HERE!
> +
> +COMMAND="${0##*/}"
> +
> +DIR=/sys/hypervisor/version
> +# these return non-zero if hypervisor is absent, this is detected below
> +read major 2> /dev/null < $DIR/major
> +read minor 2> /dev/null < $DIR/minor
> +VERSION="$major.$minor"
> +
> +DIR="/usr/lib/xen-$VERSION/bin"
> +
> +[ -x "$DIR/$COMMAND" ] && exec "$DIR/$COMMAND" "$@"
> +
> +
> +# Certainly didn't work, now report failures, slower-path
> +set -e
> +
> +error() {
> + err="$1"
> + shift
> + echo "ERROR: " "$@" >&2
> + exit $err
> +}
> +
> +[ -e "/sys/hypervisor/type" ] || error 1 "Can't find hypervisor information in sysfs!"
> +
> +read type < /sys/hypervisor/type
> +if [ "$type" != xen ]; then
> + [ -n "$type" ] || error 1 "Can't read hypervisor type from sysfs!"
> + error 1 "Hypervisor is not xen but '$type'!"
> +fi
> +
> +if [ ! -d "/usr/lib/xen-$VERSION" ]; then
> + error 127 "Can't find version $VERSION of xen utils (maybe xen-utils-$VERSION was already removed before rebooting out of Xen $VERSION), bailing out!"
> +fi
> +
> +error 127 "Unable to execute $DIR/$COMMAND"
>
> -exec "$DIR/bin/$COMMAND" "$@"
> diff --git a/debian/scripts/xen-version b/debian/scripts/xen-version
> index 492070a43b..5c42ad7351 100755
> --- a/debian/scripts/xen-version
> +++ b/debian/scripts/xen-version
> @@ -6,10 +6,12 @@ error() {
> }
>
> if [ -e "/sys/hypervisor/type" ]; then
> - type="$(cat /sys/hypervisor/type)"
> + read type < /sys/hypervisor/type
> if [ "$type" = xen ]; then
> DIR=/sys/hypervisor/version
> - VERSION="$(cat $DIR/major).$(cat $DIR/minor)"
> + read major < $DIR/major
> + read minor < $DIR/minor
> + VERSION="$major.$minor"
> elif [ -z "$type" ]; then
> error "Can't read hypervisor type from sysfs!"
> else
>
More information about the Pkg-xen-devel
mailing list