-
Notifications
You must be signed in to change notification settings - Fork 69
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
Add USDT tracepoints for key GC activities #883
Conversation
The clippy warnings on macOS seems to be because the |
Yeah. Just suppress the warning. |
Did you have the performance overheads of the extra indirection via |
I believe so. |
Can you also include an example bpftrace script somewhere in the |
I plan to place the tracing scripts under I want to get the tracepoints merged first, so that people wanting to use this don't need to patch their mmtk-core. |
Can we also include USDT trace points for the following functions in mmtk-core?
Note that we have a long-term goal of removing the We usually need to initialise some states in the bpftrace trace. Since mmtk-core doesn't provide a official C API (the bindings may create |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this PR looks good in general. The only missing pieces that I think we must include in this PR are the USDT trace points in the beginning of GC threads and harness_{begin,end}
, without which it would be incomplete.
I am OK with postponing the splitting of process_edges
trace point to another PR, because the current method is known to work.
I have another general suggestion, but doesn't have to be included in this PR, either. We may let GCWork
implement a very general fn size(&self) -> Option<usize>
method so that when we do eBPF tracing, we can add a size argument to every work packet if it makes sense. I think it makes sense for quite many packet types, including ProcessEdgesWork
, ScanObjects
, Process{,Region}ModBuf
as well as weak reference and finalizer processing. VM bindings can also use that to describe the size of their work packets, too, if that makes sense. Examples include the number of "potential pinning parents" a Ruby VM has, the number of elements in weak global tables, such as "string tables" in OpenJDK and fstring_table
in Ruby, etc.
80acef8
to
a8c473c
Compare
Co-authored-by: Claire Huang <claire.x.huang@gmail.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
These tools utilize the tracepoints added in mmtk#883 Co-authored-by: Claire Huang <claire.x.huang@gmail.com>
These tools utilize the tracepoints added in #883. The GC visualization tools requires some post-processing and is just a bit more complicated in general. That will be added in a separate PR. --------- Co-authored-by: Claire Huang <claire.x.huang@gmail.com>
These tools utilize the tracepoints added in mmtk#883. The GC visualization tools requires some post-processing and is just a bit more complicated in general. That will be added in a separate PR. --------- Co-authored-by: Claire Huang <claire.x.huang@gmail.com>
This work is described in Improving Garbage Collection Observability with Performance Tracing by Claire Huang, Stephen M. Blackburn, and Zixian Cai, to appear in MPLR'23.
These tracepoints are compiled into
nop
s with minimal overhead when not attached as measured in the paper. The tracing tools that make use of these tracepoints will be released separately in another PR.