Crates.io | macos-profiler |
lib.rs | macos-profiler |
version | 0.2.1 |
source | src |
created_at | 2018-02-28 05:27:20.460017 |
updated_at | 2019-05-29 12:46:50.942796 |
description | A macOS profiler for Rust programs |
homepage | |
repository | https://github.com/tcr/macos-profiler |
max_upload_size | |
id | 53150 |
size | 14,624 |
A very basic profiler for Rust on macOS. It uses dtrace under the hood (invoked via shell, no less!) to log function calls every 1000Hz. This can give an approximate amount of information needed to debug CPU issues in your program.
The profiler has no deep cargo
integration yet, meaning you'll have to specify the full path to your compiled binaries, but a hypothetical cargo macos-profiler
could be able to discover [[bin]]
paths more easily.
cargo install macos-profiler
Then:
macos-profiler time-spent --command ./target/debug/my-binary
Lists functions in order of how much time it spent in your stack hierarchy.
macos-profiler frequency -c ./target/debug/other-binary
Lists functions in order of how much time it spent the top of the stack, relative to all other top functions.
$ cd ripgrep
$ sudo macos-profiler time-spent -c "./target/debug/rg "macos-profiler" /Users/tcr"
info: type ctrl+c to terminate your program and finish profiling.
dtrace: system integrity protection is on, some features will not be available
...
0.76 20389 libsystem_kernel.dylib _open
0.77 20539 rg std::sys::unix::fs::File::open_c::hdfc195b95f7947a9
0.78 21008 rg std::fs::OpenOptions::_open::he1336c8c2c1b3d49
0.88 23674 libsystem_kernel.dylib read
1.04 27757 rg <rg::decoder::DecodeReader<R, B> as std::io::Read>::read
1.54 41250 rg rg::search_stream::InputBuffer::fill::h178cd97cbf3a8408
2.15 57728 rg <rg::search_stream::Searcher<'a, R, W>>::run
2.18 58315 rg rg::worker::Worker::search::hff2f8efb10217782
2.86 76557 rg rg::worker::Worker::run::h4a7a18cf12b9ee92
2.94 78737 rg rg::run_parallel::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::hcb1f8a407164ade4
4.04 108196 rg ignore::walk::Worker::run::he88d3c0c45c341d2
4.04 108279 rg std::sys::unix::thread::Thread::new::thread_start::h65eccf0a2ed2beb8
4.04 108280 rg std::sys_common::thread::start_thread::h2cb3c738dd903de2
4.04 108280 rg <F as alloc::boxed::FnBox<A>>::call_box
4.04 108280 rg std::panic::catch_unwind::h45c281ae72599974
4.04 108280 rg std::thread::Builder::spawn::_$u7b$$u7b$closure$u7d$$u7d$::hfb393ad434cfed51
4.04 108281 rg ignore::walk::WalkParallel::run::_$u7b$$u7b$closure$u7d$$u7d$::h56a4cd12003088da
4.04 108281 rg std::sys_common::backtrace::__rust_begin_short_backtrace::hbe0d05bdae559442
4.04 108281 rg std::panicking::try::do_call::h5e4bd48f15d06657
4.04 108281 rg std::thread::Builder::spawn::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h233c9e30f689939e
4.04 108281 rg <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
4.04 108281 rg std::panicking::try::hdcb79b76b96f6366
4.04 108282 libsystem_pthread.dylib thread_start
4.04 108296 rg _rust_maybe_catch_panic
8.08 216562 libsystem_pthread.dylib pthread_body
info: done.
Contributions welcome!
MIT or Apache-2.0, at your option.