#!/bin/sh # knelperf-toolbox — front door to the on-demand perf toolbox LXC on this node. # usage: knelperf-toolbox run '' (starts the LXC if stopped, runs, leaves it up) # knelperf-toolbox shell (interactive) # knelperf-toolbox start|stop|status # The LXC (vmid 950) is STOPPED at rest — zero footprint; stop it when done. # Docs: https://community.turnsys.com/t/328 VMID=${KNELPERF_TOOLBOX_VMID:-950} ensure_running() { if ! pct status "$VMID" 2>/dev/null | grep -q running; then pct start "$VMID" i=0 until pct exec "$VMID" -- true 2>/dev/null; do i=$((i + 1)); [ $i -gt 45 ] && { echo "boot timeout" >&2; return 1; } sleep 2 done fi # host-kernel analysis mounts — pct skips virtual-fs bind sources, so # tracefs/debugfs are mounted at runtime (container is privileged + # apparmor unconfined precisely for this). pct exec "$VMID" -- sh -c ' mountpoint -q /sys/kernel/tracing || mount -t tracefs none /sys/kernel/tracing 2>/dev/null mountpoint -q /sys/kernel/debug || mount -t debugfs none /sys/kernel/debug 2>/dev/null' } case "${1:-help}" in run) shift; ensure_running && pct exec "$VMID" -- sh -c "$*" ;; shell) ensure_running && pct enter "$VMID" ;; start) ensure_running ;; stop) pct shutdown "$VMID" --timeout 60 2>/dev/null || pct stop "$VMID" ;; status) pct status "$VMID" 2>/dev/null || echo "vmid $VMID not present" ;; *) sed -n '2,6p' "$0" | sed 's/^# \?//' ;; esac