Monorepo for Tangled
Something went wrong. Try again.
Shell
123456789101112131415161718192021222324252627282930313233343536373839#!/usr/bin/env bash# quick boot-time benchmark for the spindle nixos microvm.# boots N times running a trivial command, reports wall-clock + systemd-analyze.# needs: sudo modprobe vhost_vsockset -euo pipefail
N="${1:-5}"cd "$(git rev-parse --show-toplevel)"
strip_ansi() { sed -E "s/$(printf '\033')\[[0-9;]*[a-zA-Z]//g; s/$(printf '\033')\([a-zA-Z]//g"; }
echo ">>> building runner + image"nix develop --command go build -o spindle/spindle-microvm-run ./cmd/spindle-microvm-runTARBALL=$(nix build .#spindle-nixos-image-tarball --no-link --print-out-paths)
WORK=$(mktemp -d -t spindle-bench-XXXXXX)trap 'chmod -R +w "$WORK" 2>/dev/null || true; rm -rf "$WORK"' EXITmkdir -p "$WORK/image"tar -C "$WORK/image" -xzf "$TARBALL"SPEC="$WORK/image/spec.json"
echo ">>> systemd-analyze breakdown"spindle/spindle-microvm-run --image-spec "$SPEC" --work-dir "$WORK/analyze" --exec-timeout 60s -- \ /run/current-system/sw/bin/systemd-analyze time 2>/dev/null | strip_ansi | grep -i startup || true
echo ">>> $N timed boot+exec(true) runs"total=0for i in $(seq 1 "$N"); do start=$EPOCHREALTIME spindle/spindle-microvm-run --image-spec "$SPEC" --work-dir "$WORK/run$i" --exec-timeout 60s -- \ /run/current-system/sw/bin/true >/dev/null 2>&1 end=$EPOCHREALTIME ms=$(( (${end%.*} - ${start%.*}) * 1000 + (10#${end#*.} - 10#${start#*.}) / 1000 )) echo " run $i: ${ms}ms" total=$((total + ms)) rm -rf "$WORK/run$i"doneecho ">>> mean wall-clock: $((total / N))ms over $N runs"