Files
hakmem/benchmarks/scripts/utils/run_usdt_overview.sh
Moe Charm (CI) 52386401b3 Debug Counters Implementation - Clean History
Major Features:
- Debug counter infrastructure for Refill Stage tracking
- Free Pipeline counters (ss_local, ss_remote, tls_sll)
- Diagnostic counters for early return analysis
- Unified larson.sh benchmark runner with profiles
- Phase 6-3 regression analysis documentation

Bug Fixes:
- Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB)
- Fix profile variable naming consistency
- Add .gitignore patterns for large files

Performance:
- Phase 6-3: 4.79 M ops/s (has OOM risk)
- With SuperSlab: 3.13 M ops/s (+19% improvement)

This is a clean repository without large log files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 12:31:14 +09:00

102 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Build with USDT tracepoints and run perf stat for USDT events + PMU on tiny_hot + mixed
# Usage: scripts/run_usdt_overview.sh [cycles]
ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd)
# Allow overriding perf binary (e.g., WSL generic tools). Usage:
# PERF_BIN=/usr/lib/linux-tools-6.8.0-86/perf bash scripts/run_usdt_overview.sh 40000
PERF_BIN=${PERF_BIN:-perf}
cd "$ROOT_DIR"
cycles=${1:-50000}
if [[ "${SKIP_BUILD:-0}" != "1" ]]; then
echo "[build] USDT-enabled benches"
make -s clean >/dev/null 2>&1 || true
make -s bench_fast CFLAGS+=" -DHAKMEM_USDT=1" >/dev/null
else
echo "[build] skipped (SKIP_BUILD=1)"
fi
TS=$(date +%Y%m%d_%H%M%S)
OUTDIR="bench_results/usdt_${TS}"
mkdir -p "$OUTDIR"
EVENTS_USDT=(
sdt:hakmem:sll_pop
sdt:hakmem:mag_pop
sdt:hakmem:front_pop
sdt:hakmem:bump_hit
sdt:hakmem:slow_alloc
sdt:hakmem:sll_push
sdt:hakmem:mag_push
sdt:hakmem:spill_super
sdt:hakmem:spill_tiny
sdt:hakmem:remote_drain
sdt:hakmem:superslab_alloc
sdt:hakmem:superslab_fail
)
EVENTS_PMU=(cycles,instructions,L1-dcache-load-misses,branch-misses)
join_events() {
local IFS=','; echo "$*"
}
PMU_JOINED=$(join_events "${EVENTS_PMU[@]}" )
# Detect USDT availability by actually probing a dummy run
USDT_JOINED=""
{
"$PERF_BIN" stat -x , -e sdt:hakmem:front_pop true 1>/dev/null 2>"$OUTDIR/.usdt_probe.err"
} || true
if rg -q "unknown tracepoint" "$OUTDIR/.usdt_probe.err"; then
echo "[warn] perf does not support 'sdt:' on this system (unknown tracepoint). Using PMU-only." | tee -a "$OUTDIR/summary.txt"
echo "[hint] Install perf matching your kernel: sudo apt-get install linux-tools-\$(uname -r)" | tee -a "$OUTDIR/summary.txt"
echo "[hint] Kernel must have UPROBE/SDT support (CONFIG_UPROBE_EVENTS)." | tee -a "$OUTDIR/summary.txt"
elif rg -q "can't access trace events|No permissions" "$OUTDIR/.usdt_probe.err"; then
echo "[warn] USDT blocked by tracefs perms; falling back to PMU-only." | tee -a "$OUTDIR/summary.txt"
echo "[hint] Try: sudo mount -t tracefs -o mode=755 nodev /sys/kernel/tracing" | tee -a "$OUTDIR/summary.txt"
echo "[hint] And: sudo sysctl kernel.perf_event_paranoid=1" | tee -a "$OUTDIR/summary.txt"
else
# Looks good; enable USDT events
USDT_JOINED=$(join_events "${EVENTS_USDT[@]}")
fi
# Basic environment info for troubleshooting
{
echo "[env] perf=$($PERF_BIN --version 2>/dev/null | head -n1)";
echo "[env] kernel=$(uname -r)";
echo "[env] tracefs=$(ls -ld /sys/kernel/tracing 2>/dev/null || true)";
} | tee -a "$OUTDIR/summary.txt"
run_perf() {
local tag="$1"; shift
local bin="$1"; shift
local size="$1"; shift
local batch="$1"; shift
local cyc="$1"; shift
local log="$OUTDIR/${tag}_s${size}_b${batch}_c${cyc}.stat.csv"
echo "[perf] $tag size=$size batch=$batch cycles=$cyc" | tee -a "$OUTDIR/summary.txt"
if [[ -n "$USDT_JOINED" ]]; then
"$PERF_BIN" stat -x , -e "$USDT_JOINED","$PMU_JOINED" "$bin" "$size" "$batch" "$cyc" 1>/dev/null 2>"$log" || true
else
"$PERF_BIN" stat -x , -e "$PMU_JOINED" "$bin" "$size" "$batch" "$cyc" 1>/dev/null 2>"$log" || true
fi
}
# Tiny-hot focus (8/16/32/64)
for s in 8 16 32 64; do
for b in 100; do
HAKMEM_QUIET=1 run_perf "hakmem" ./bench_tiny_hot_hakmem "$s" "$b" "$cycles"
HAKMEM_QUIET=1 run_perf "system" ./bench_tiny_hot_system "$s" "$b" "$cycles"
done
done
# Random mixed overview
bash scripts/run_random_mixed_matrix.sh 80000 >/dev/null || true
echo "[done] USDT overview: $OUTDIR"
ls -1 "$OUTDIR" | sed -n '1,20p'