KEMBAR78
Productize VMStructs-based stack walker by apangin · Pull Request #1073 · async-profiler/async-profiler · GitHub
Skip to content

Conversation

apangin
Copy link
Member

@apangin apangin commented Dec 5, 2024

Description

Add two stack walking modes based on VMStructs: cstack=vm for regular use and cstack=vmx for expert use. The former is more like a drop-in replacement for AsyncGetCallTrace, while the latter displays additional internal frames.

This PR also adds -F stats option to measure and log duration of stack walking. It turns out that cstack=vm performs not worse than AsyncGetCallTrace unwinding.

Related issues

#795
#995
#694

Motivation and context

This is the next step on our path to abandon use of AsyncGetCallTrace completely and make VMStructs-based unwinding the default mode in async-profiler. See #795 for more context.

How has this been tested?

Manual testing with various apps (renaissance suite, spring petclinic) + new cstack unit tests.

vm/vmx stack walking is not currently supported on macOS.
UPD: macOS support has been added in f334c51


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@apangin apangin merged commit 3ccae7c into master Dec 5, 2024
10 checks passed
| `--begin function` | `begin=FUNCTION` | Automatically start profiling when the specified native function is executed. |
| `--end function` | `end=FUNCTION` | Automatically stop profiling when the specified native function is executed. |
| `--ttsp` | `ttsp` | time-to-safepoint profiling. An alias for `--begin SafepointSynchronize::begin --end RuntimeService::record_safepoint_synchronized`.</br>It is not a separate event type, but rather a constraint. Whatever event type you choose (e.g. `cpu` or `wall`), the profiler will work as usual, except that only events between the safepoint request and the start of the VM operation will be recorded. |
| `--ttsp` | `ttsp` | time-to-safepoint profiling. An alias for `--begin SafepointSynchronize::begin --end RuntimeService::record_safepoint_synchronized`.</br>It is not a separate event type, but rather a constraint. Whatever event type you choose (e.g. `cpu` or `wall`), the profiler will work as usual, except that only events between the safepoint request and the start of the VM operation will be recorded. |
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: --ttsp row duplicated

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was apparently a result of a merge conflict. Thanks for noticing - I'll fix that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants