-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
dtrace probes #875
Comments
Linux has its own form of static probe: https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation. They are very low cost and various tools, like gdb and systemtap, already know how to access them. |
Its been a while, I looked at it recently and I can't see any way to get it working on stable. |
With the up-and-coming support for eBPF-based program tracing using tools like |
@jonhoo AFAIK my |
I wonder whether |
I haven't tried with eBPF, but it ought to work -- I implemented it the same way as |
I can confirm that #![feature(asm)]
#[macro_use]
#[no_link]
extern crate probe; to inferno here. I then added annotations here: if line.is_empty() {
probe!(inferno_collapse_perf, post_stack);
self.after_event();
} else {
probe!(inferno_collapse_perf, in_stack);
self.on_line(line.trim_end());
} This then let me do this: $ sudo bpftrace -e "usdt:$CARGO_TARGET_DIR/release/inferno-collapse-perf:inferno_collapse_perf:post_stack /@start[pid]/ { @ns[comm]= hist(nsecs - @start[pid]); delete(@start[pid]); } usdt:$CARGO_TARGET_DIR/release/inferno-collapse-perf:inferno_collapse_perf:post_stack { @start[pid] = nsecs; }"
Attaching 2 probes...
^C
@ns[inferno-collaps]:
[1K, 2K) 24014 |@@@@ |
[2K, 4K) 108620 |@@@@@@@@@@@@@@@@@@ |
[4K, 8K) 129485 |@@@@@@@@@@@@@@@@@@@@@ |
[8K, 16K) 310007 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
[16K, 32K) 244627 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
[32K, 64K) 69413 |@@@@@@@@@@@ |
[64K, 128K) 21566 |@@@ |
[128K, 256K) 152 | |
[256K, 512K) 1 | |
[512K, 1M) 2 | | That's really neat! The command is a little awkward since bpftrace requires that the name of the binary matches the program name (bpftrace/bpftrace#328 (comment)), and Rust identifiers cannot have |
Also note that with bpftrace/bpftrace#444 (which is really bpftrace/bpftrace#280), the above can (?) be simplified greatly to: $ sudo bpftrace -p $(pgrep inferno-collapse-perf) -e "\
usdt::post_stack /@start[pid]/ { @ns[comm]= hist(nsecs - @start[pid]); delete(@start[pid]); }\
usdt::post_stack { @start[pid] = nsecs; }" |
Weird to come across an issue, linking my own pull requests. I'd love to see support for dtrace probes in Rust! Should also check out libstapsdt, which can be used for dynamic support. I'm not as familiar with rust as I am other runtimes, but it would be great to at least have an I'm planning on doing a lot more eBPF USDT work in the next few months, I'd love to help however I can. |
Issue by graydon
Wednesday May 29, 2013 at 23:45 GMT
For earlier discussion, see rust-lang/rust#6816
This issue was labelled with: A-instrumentation, A-libs, I-enhancement, P-low in the Rust repository
I think rust should expose dtrace userland probes
Links:
http://www.solarisinternals.com/wiki/index.php/DTrace_Topics_USDT
https://wikis.oracle.com/display/DTrace/Statically+Defined+Tracing+for+User+Applications
https://wiki.freebsd.org/DTrace/userland
Some specific providers (including some dynamic):
https://github.com/chrisa/libusdt
https://github.com/chrisa/node-dtrace-provider
http://prefetch.net/projects/apache_modtrace/index.html
https://bugzilla.mozilla.org/show_bug.cgi?id=370906
Probably at least some for pervasive / standard-library actions:
Note that the "USDT" mechanism provides static probes whereas things like
libusdt
(above) provide an API for dynamically registering probes at runtime. This is probably important, possibly even a good place to start, though it's slightly more expensive; ideally of course we should be able to provide both.See also #6810 concerning
metrics
. I think there's some potential design-informing between the two. Possibly libusdt as a reporting sink for metrics?The text was updated successfully, but these errors were encountered: