about summary refs log tree commit diff
path: root/packages/perf-flamegraph-pid/perf-flamegraph-pid.sh
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2024-03-06 06:29:24 -0800
committerFranck Cuny <franck@fcuny.net>2024-03-06 06:29:24 -0800
commit1e4a5aa09c1c8f43722c9c260f011398799a8e8f (patch)
treecd73e0fb8ba53bd21cee6ccf2dcc85639bbbb93f /packages/perf-flamegraph-pid/perf-flamegraph-pid.sh
parentset correct git email in the profiles (diff)
downloadworld-1e4a5aa09c1c8f43722c9c260f011398799a8e8f.tar.gz
rename `tools` to `packages` to follow convention
The convention is to use `pkgs` or `packages` for overlays and
definition of custom packages. Since I'm already using `pkg` for go,
I prefer to use `packages` for my scripts.
Diffstat (limited to 'packages/perf-flamegraph-pid/perf-flamegraph-pid.sh')
-rwxr-xr-xpackages/perf-flamegraph-pid/perf-flamegraph-pid.sh20
1 files changed, 20 insertions, 0 deletions
diff --git a/packages/perf-flamegraph-pid/perf-flamegraph-pid.sh b/packages/perf-flamegraph-pid/perf-flamegraph-pid.sh
new file mode 100755
index 0000000..2ca3d16
--- /dev/null
+++ b/packages/perf-flamegraph-pid/perf-flamegraph-pid.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+OUT_DIR="${HOME}/workspace/debug/flamegraph"
+OUT_DATA="${OUT_DIR}/$(date +%y%m%d-%H%M%S).data"
+OUT_SVG="${OUT_DIR}/$(date +%y%m%d-%H%M%S).svg"
+
+mkdir -p "${OUT_DIR}"
+
+# record the data with perf. We need to run this with sudo to get all
+# the privileges we need.
+sudo perf record -g --call-graph dwarf --freq max --output "${OUT_DATA}" "$@"
+
+# give me ownership of the file
+sudo chown "${USER}" "${OUT_DATA}"
+
+perf script --input "${OUT_DATA}" |
+  stackcollapse-perf.pl |
+  flamegraph.pl >"${OUT_SVG}"