Repository navigation
fix(walltime): infer Go and Java unwinding for both profilers - #603
not-matthias wants to merge 2 commits into
Conversation
Resolve unwinding from original benchmark targets before exec-harness serialization. Use frame pointers for groups containing Go or Java, preserve explicit overrides and backend DWARF defaults, and scope Go warning suppression to each benchmark environment.
Preserve suggested_unwinding unchanged and keep mixed-target aggregation and profiler-specific policy in the resolver.
Merging this PR will not alter performance2 warnings
Comparing Footnotes
|
[Medium impact] The change affects Linux wall-time profiling with perf and samply. Fix exec argument detection before merging so ordinary arguments cannot select the wrong unwinding mode.
|
| BenchmarkTarget::Exec { command, .. } => Some(command), | ||
| BenchmarkTarget::Entrypoint { .. } => None, | ||
| }) | ||
| .flatten() | ||
| .map(String::as_str); |
There was a problem hiding this comment.
Arguments select the wrong unwinding
Every exec argument is checked as an executable name. For example, codspeed exec -m walltime -- grep go corpus.txt selects frame-pointer unwinding because the pattern go reaches suggested_unwinding as a command. If the native program was built without frame pointers, its call stacks will be incomplete. Every other target in the same recording also gets this setting.
Keep each target's argument list intact and distinguish its executable from ordinary arguments before inferring the runtime.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/executor/orchestrator.rs
Line: 153-157
Comment:
**Arguments select the wrong unwinding**
Every exec argument is checked as an executable name. For example, `codspeed exec -m walltime -- grep go corpus.txt` selects frame-pointer unwinding because the pattern `go` reaches `suggested_unwinding` as a command. If the native program was built without frame pointers, its call stacks will be incomplete. Every other target in the same recording also gets this setting.
Keep each target's argument list intact and distinguish its executable from ordinary arguments before inferring the runtime.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
TLDR: Detect Go and Java commands before exec-harness serialization and use frame-pointer unwinding with both perf and samply (Linux).
Stacked on #586; review against its branch.
Fixes COD-3861