[Pkg-xen-devel] [PATCH 8/9] debian/scripts: Optimize runtime scripts
Elliott Mitchell
ehem+debian at m5p.com
Fri Nov 27 02:30:42 GMT 2020
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>
---
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
--
(\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/)
\BS ( | ehem+sigmsg at m5p.com PGP 87145445 | ) /
\_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
More information about the Pkg-xen-devel
mailing list