Skip to content

A high-performance timeline tracing library for Rust, used by TiKV

License

Notifications You must be signed in to change notification settings

zhongzc/minitrace-rust

 
 

Minitrace

Actions Status LICENSE

A high-performance, ergonomic timeline tracing library for Rust.

Usage

[dependencies]
minitrace = { git = "https://github.com/pingcap-incubator/minitrace-rust.git" }

In Synchronous Code

let (root, collector) = minitrace::trace_enable(0u32);
{
    let _parent_guard = root;
    {
        let _child_guard = minitrace::new_span(1u32);  
    }
}

let spans = collector.collect();

In Asynchronous Code

Futures:

use minitrace::prelude::*;

let task = async {
    let guard = minitrace::new_span(1u32);
    // ...
    drop(guard);

    async {}.trace_async(2u32).await;

    runtime::spawn(async {}.trace_task(3u32));

    async {}.trace_async(4u32).await;
};

let (spans, _r) = runtime::block_on(task.future_trace_enable(0u32));

Threads:

let (root, collector) = minitrace::trace_enable(0u32);

let handle = minitrace::trace_crossthread(1u32);

std::thread::spawn(move || {
    let mut handle = handle;
    let _parent_guard = handle.trace_enable();

    {
        let _child_guard = minitrace::new_span(2u32);
    }
});

drop(root);

let spans = collector.collect();

Timeline Examples

$ cargo +nightly run --example synchronous
====================================================================== 111.69 ms
=                                                                        2.13 ms
                                                                         1.06 ms
 ==                                                                      4.14 ms
  =                                                                      2.07 ms
   ===                                                                   6.16 ms
     =                                                                   3.08 ms
       =====                                                             8.18 ms
          ==                                                             4.09 ms
            ======                                                      10.20 ms
                ===                                                      5.10 ms
                   =======                                              12.18 ms
                       ===                                               6.09 ms
                          ========                                      14.15 ms
                               ====                                      7.08 ms
                                   ==========                           16.16 ms
                                        =====                            8.08 ms
                                             ===========                18.17 ms
                                                   =====                 9.08 ms
                                                         ============   20.17 ms
                                                               ======   10.08 ms
$ cargo +nightly run --example asynchronous
=============             =============                                 21.49 ms
=============                                                           10.65 ms
                          ==========================                    21.33 ms
                          =============                                 10.66 ms
                                       =============                    10.64 ms
=============             ==========================                    31.62 ms
                          =============                                 10.66 ms
                                       =============                    10.63 ms
========================= ============= =============                   41.30 ms
                          =============                                 10.62 ms
                                        =============                   10.57 ms
   ====================================== ==========================    51.43 ms
                                          =============                 10.57 ms
                                                       =============    10.79 ms
                          =============                                 10.71 ms

About

A high-performance timeline tracing library for Rust, used by TiKV

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%