Skip to content

Add --pids and --max-depth to flame command and use Go implementation of stackcollapse-perf to eliminate Perl dependency #332

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 31 commits into from
May 13, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
bddbd30
Use Go implementation of stackcollapse-perf to eliminate Perl depende…
harp-intel May 6, 2025
e6cb128
Add go.mod file for stackcollapse-perf module
harp-intel May 6, 2025
64bd60f
spelling
harp-intel May 6, 2025
9c0bff0
Remove stackcollapse-perf reset command from Makefile
harp-intel May 6, 2025
dbe2716
use go stackcollapse
harp-intel May 6, 2025
22da023
Use Go implementation of stackcollapse-perf to eliminate Perl depende…
harp-intel May 6, 2025
b29f02d
Add go.mod file for stackcollapse-perf module
harp-intel May 6, 2025
14317ba
spelling
harp-intel May 6, 2025
94b6662
Remove stackcollapse-perf reset command from Makefile
harp-intel May 6, 2025
4145397
use go stackcollapse
harp-intel May 6, 2025
61aa706
resolve conflict
harp-intel May 7, 2025
7c72161
fix out of range panic
harp-intel May 7, 2025
d41eb46
add maximum depth of flame graph rendering
harp-intel May 7, 2025
775255c
refactor and add unit tests
harp-intel May 8, 2025
ff19d06
Use Go implementation of stackcollapse-perf to eliminate Perl depende…
harp-intel May 6, 2025
811d8a6
Add go.mod file for stackcollapse-perf module
harp-intel May 6, 2025
556d58a
spelling
harp-intel May 6, 2025
d788587
Remove stackcollapse-perf reset command from Makefile
harp-intel May 6, 2025
c6c2797
use go stackcollapse
harp-intel May 6, 2025
d21319c
Use Go implementation of stackcollapse-perf to eliminate Perl depende…
harp-intel May 6, 2025
cfdb78c
Add go.mod file for stackcollapse-perf module
harp-intel May 6, 2025
cf72f78
Remove stackcollapse-perf reset command from Makefile
harp-intel May 6, 2025
bbf2669
fix out of range panic
harp-intel May 7, 2025
e4d4674
add maximum depth of flame graph rendering
harp-intel May 7, 2025
e3454b2
refactor and add unit tests
harp-intel May 8, 2025
08d4a5c
Merge branch 'stackcollapse' of github.com:intel/PerfSpect into stack…
harp-intel May 8, 2025
139f652
support multiple pids
harp-intel May 9, 2025
96adc0e
set cwd to temp dir in script
harp-intel May 9, 2025
f1db0a9
Merge branch 'main' into stackcollapse
harp-intel May 9, 2025
52c4a8f
more refactoring
harp-intel May 11, 2025
9203d3f
replace log with slog
harp-intel May 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor and add unit tests
Signed-off-by: Harper, Jason M <[email protected]>
  • Loading branch information
harp-intel committed May 8, 2025
commit 775255ce2e060a4df233f95fa5711cb02149635e
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ endif
test:
@echo "Running unit tests..."
go test -v ./...
cd tools/stackcollapse-perf && go test -v ./...

.PHONY: update-deps
update-deps:
Expand Down
35 changes: 12 additions & 23 deletions internal/script/script_defs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1316,10 +1316,6 @@ maxdepth={{.MaxDepth}}
restore_settings() {
echo "$PERF_EVENT_PARANOID" > /proc/sys/kernel/perf_event_paranoid
echo "$KPTR_RESTRICT" > /proc/sys/kernel/kptr_restrict
rm -f "$perf_fp_data"
rm -f "$perf_dwarf_data"
rm -f "$perf_dwarf_folded"
rm -f "$perf_fp_folded"
if [ -n "$perf_fp_pid" ]; then
kill -0 $perf_fp_pid 2>/dev/null && kill -INT $perf_fp_pid
fi
Expand All @@ -1328,12 +1324,6 @@ restore_settings() {
fi
}

# create temporary output files
perf_fp_data=$(mktemp)
perf_dwarf_data=$(mktemp)
perf_dwarf_folded=$(mktemp)
perf_fp_folded=$(mktemp)

# adjust perf_event_paranoid and kptr_restrict
PERF_EVENT_PARANOID=$( cat /proc/sys/kernel/perf_event_paranoid )
echo -1 >/proc/sys/kernel/perf_event_paranoid
Expand All @@ -1354,10 +1344,10 @@ fi
# frame pointer mode
# if pid was provided, use it
if [ "$pid" -ne 0 ]; then
perf record -F "$frequency" -p "$pid" -g -o "$perf_fp_data" -m 129 &
perf record -F "$frequency" -p "$pid" -g -o perf_fp_data -m 129 &
else
# if no pid was provided, use system-wide profiling
perf record -F "$frequency" -a -g -o "$perf_fp_data" -m 129 &
perf record -F "$frequency" -a -g -o perf_fp_data -m 129 &
fi
perf_fp_pid=$!
if ! kill -0 $perf_fp_pid 2>/dev/null; then
Expand All @@ -1368,10 +1358,10 @@ fi
# dwarf mode
# if pid was provided, use it
if [ "$pid" -ne 0 ]; then
perf record -F "$frequency" -p "$pid" -g -o "$perf_dwarf_data" -m 257 --call-graph dwarf,8192 &
perf record -F "$frequency" -p "$pid" -g -o perf_dwarf_data -m 257 --call-graph dwarf,8192 &
else
# if no pid was provided, use system-wide profiling
perf record -F "$frequency" -a -g -o "$perf_dwarf_data" -m 257 --call-graph dwarf,8192 &
perf record -F "$frequency" -a -g -o perf_dwarf_data -m 257 --call-graph dwarf,8192 &
fi
perf_dwarf_pid=$!
if ! kill -0 $perf_dwarf_pid 2>/dev/null; then
Expand All @@ -1398,24 +1388,23 @@ fi
wait ${perf_fp_pid} ${perf_dwarf_pid}

# collapse perf data
perf script -i "$perf_dwarf_data" | stackcollapse-perf > "$perf_dwarf_folded"
perf script -i "$perf_fp_data" | stackcollapse-perf > "$perf_fp_folded"
perf script -i perf_dwarf_data > perf_dwarf_stacks
stackcollapse-perf perf_dwarf_stacks > perf_dwarf_folded
perf script -i perf_fp_data > perf_fp_stacks
stackcollapse-perf perf_fp_stacks > perf_fp_folded

# Display results
if [ -f "$perf_dwarf_folded" ]; then
if [ -f perf_dwarf_folded ]; then
echo "########## perf_dwarf ##########"
cat "$perf_dwarf_folded"
cat perf_dwarf_folded
fi
if [ -f "$perf_fp_folded" ]; then
if [ -f perf_fp_folded ]; then
echo "########## perf_fp ##########"
cat "$perf_fp_folded"
cat perf_fp_folded
fi

echo "########## maximum depth ##########"
echo "$maxdepth"

# Clean up temporary files
rm -f "$perf_fp_data" "$perf_dwarf_data" "$perf_dwarf_folded" "$perf_fp_folded"
`,
Superuser: true,
Depends: []string{"perf", "stackcollapse-perf"},
Expand Down
Loading