B7Q32HRFDMDDMQPLBKWS42NWSXLARPAOVZXCDQG2I3J2WVTWNFNQC PERF_DATA="perf.data"
BENCH_ARGS="${PERF_BENCH_ARGS:---no-render}"# Results directory configurationRESULTS_ROOT="${PERF_RESULTS_ROOT:-perf}"RUN_LABEL="${PERF_RUN_LABEL:-$(date +%H%M%S)}"DATE_DIR="${RESULTS_ROOT}/$(date +%Y-%m-%d)"REPORT_DIR="${DATE_DIR}/report"FLAME_DIR="${DATE_DIR}/flamegraph"PERF_DATA="${DATE_DIR}/perf-${RUN_LABEL}.data"PERF_REPORT="${REPORT_DIR}/perf-${RUN_LABEL}.log"PERF_FOLDED="${FLAME_DIR}/perf-${RUN_LABEL}.folded"FLAMEGRAPH_SVG="${FLAME_DIR}/flamegraph-${RUN_LABEL}.svg"# Mode: perf | c2c | bothPERF_MODE="${PERF_MODE:-perf}"C2C_DIR="${DATE_DIR}/c2c"C2C_DATA="${C2C_DIR}/c2c-${RUN_LABEL}.data"C2C_REPORT="${C2C_DIR}/c2c-${RUN_LABEL}.log"
perf record -g --call-graph dwarf "$BENCH_EXE" "$ITERATIONS"
# 3. Run perf record (mode: perf/both)if [ "$PERF_MODE" = "perf" ] || [ "$PERF_MODE" = "both" ]; thenecho "Running perf record with $ITERATIONS iterations..."echo "This may require sudo permissions for kernel-level profiling."
if [ $? -eq 0 ]; thenecho "=== Profile Complete ==="echo "To view the results, run:"echo " perf report"echo ""echo "To generate a flamegraph (if tools are installed):"echo " perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg"elseecho "Error: perf record failed. You might need to run: sudo sysctl -w kernel.perf_event_paranoid=-1"
perf record -g --call-graph dwarf -o "$PERF_DATA" "$BENCH_EXE" "$ITERATIONS" $BENCH_ARGSif [ $? -eq 0 ]; thenecho "=== perf record complete ==="echo "Writing report to ${PERF_REPORT}"perf report -i "$PERF_DATA" --stdio > "$PERF_REPORT"if command -v stackcollapse-perf.pl &> /dev/null && command -v flamegraph.pl &> /dev/null; thenecho "Generating flamegraph..."perf script -i "$PERF_DATA" | stackcollapse-perf.pl > "$PERF_FOLDED"flamegraph.pl "$PERF_FOLDED" > "$FLAMEGRAPH_SVG"elseecho "Flamegraph tools not found. Skipping flamegraph generation."fielseecho "Error: perf record failed. You might need to run: sudo sysctl -w kernel.perf_event_paranoid=-1"exit 1fi
# 4. Run perf c2c record/report (mode: c2c/both)if [ "$PERF_MODE" = "c2c" ] || [ "$PERF_MODE" = "both" ]; thenif perf c2c record --help &> /dev/null; thenecho "Running perf c2c record with $ITERATIONS iterations..."mkdir -p "$C2C_DIR"perf c2c record -o "$C2C_DATA" -- "$BENCH_EXE" "$ITERATIONS" $BENCH_ARGSif [ $? -eq 0 ]; thenecho "Writing c2c report to ${C2C_REPORT}"perf c2c report -i "$C2C_DATA" --stdio > "$C2C_REPORT"elseecho "Warning: perf c2c record failed."exit 1fielseecho "Warning: perf c2c is not available in this perf build."exit 1fifi