#!/bin/env bash set -euo pipefail # Function to print help information print_help() { cat <&2 echo "Unknown parameter $1. Pass --help for valid options." exit 1 ;; esac done set +u if [[ -z "$OUTFILE" ]]; then OUTFILE=flamegraph.html fi if [[ -z "$DATAFILE" ]]; then DATAFILE=perf.data fi if [[ -z "$SPACETIME_PID" ]]; then # -f allows us to get the args # -e lets us see all users SPACETIMES="$(ps -a -e -f | grep '\.*\' | grep -v '\')" LINES="$(echo "$SPACETIMES" | wc -l)" if [[ $LINES < 1 ]] ; then >&2 echo "spacetime PID not found, is it running?" exit 1 elif [[ $LINES > 1 ]] ; then >&2 echo "Multiple spacetime PIDs. Specify one with -z" >&2 echo "$SPACETIMES" exit 1 fi SPACETIME_PID=$(echo "$SPACETIMES" | awk '{print $2}') fi if ! [[ $SPACETIME_PID =~ ^[0-9]+$ ]]; then >&2 echo "Refusing to instrument suspicious-looking PID: $SPACETIME_PID" exit 1 fi if [[ -z "$SLEEP_TIME" ]]; then SLEEP_TIME=10 fi echo "Instrumenting PID $SPACETIME_PID for $SLEEP_TIME seconds." echo "Writing data to $DATAFILE and flamegraph to $OUTFILE." perf record -m 8192 --call-graph lbr --pid $SPACETIME_PID -o $DATAFILE sleep $SLEEP_TIME perf script report flamegraph -i $DATAFILE -o $OUTFILE