diff options
author | James Gilles <jhgilles@mit.edu> | 2019-06-24 15:05:45 -0400 |
---|---|---|
committer | Eliza Weisman <eliza@buoyant.io> | 2019-06-24 12:05:45 -0700 |
commit | aa99950b9c983b842bd2107bb771c277d09d495d (patch) | |
tree | 05ee5195c124b4548d499c16334acbd829ed2404 | |
parent | aac6998c22b393dd371befbc1aacc0c5f3951c1f (diff) |
trace: Switch benchmarks to criterion (#1163)
Extracted from #1152
This makes it possible to run benchmarks on stable + gives more statistical reliability.
-rw-r--r-- | tokio-trace/Cargo.toml | 8 | ||||
-rw-r--r-- | tokio-trace/benches/no_subscriber.rs | 66 | ||||
-rw-r--r-- | tokio-trace/benches/subscriber.rs | 106 |
3 files changed, 92 insertions, 88 deletions
diff --git a/tokio-trace/Cargo.toml b/tokio-trace/Cargo.toml index 3f6bc587..6b5612fd 100644 --- a/tokio-trace/Cargo.toml +++ b/tokio-trace/Cargo.toml @@ -31,6 +31,7 @@ ansi_term = "0.11" humantime = "1.1.1" futures = "0.1" log = "0.4" +criterion = { version = "0.2", default_features = false } # These are used for the "basic" example from the tokio-trace-prototype repo, # which is currently not included as it used the `tokio-trace-log` crate, and # that crate is currently unstable. @@ -52,3 +53,10 @@ release_max_level_info = [] release_max_level_debug = [] release_max_level_trace = [] +[[bench]] +name = "subscriber" +harness = false + +[[bench]] +name = "no_subscriber" +harness = false
\ No newline at end of file diff --git a/tokio-trace/benches/no_subscriber.rs b/tokio-trace/benches/no_subscriber.rs index c086c412..d5c8090e 100644 --- a/tokio-trace/benches/no_subscriber.rs +++ b/tokio-trace/benches/no_subscriber.rs @@ -1,46 +1,42 @@ -#![feature(test)] #[macro_use] extern crate tokio_trace; #[macro_use] extern crate log; -extern crate test; -use test::Bencher; +#[macro_use] +extern crate criterion; + +use criterion::Criterion; use tokio_trace::Level; -#[bench] -fn bench_span_no_subscriber(b: &mut Bencher) { - b.iter(|| { - span!(Level::TRACE, "span"); +fn criterion_benchmark(c: &mut Criterion) { + c.bench_function("span_no_subscriber", |b| { + b.iter(|| { + span!(Level::TRACE, "span"); + }) }); -} - -#[bench] -fn bench_log_no_logger(b: &mut Bencher) { - b.iter(|| { - log!(log::Level::Info, "log"); + c.bench_function("bench_log_no_logger", |b| { + b.iter(|| { + log!(log::Level::Info, "log"); + }); }); -} - -#[bench] -fn bench_costly_field_no_subscriber(b: &mut Bencher) { - b.iter(|| { - span!( - Level::TRACE, - "span", - foo = tokio_trace::field::display(format!("bar {:?}", 2)) - ); + c.bench_function("bench_costly_field_no_subscriber", |b| { + b.iter(|| { + span!( + Level::TRACE, + "span", + foo = tokio_trace::field::display(format!("bar {:?}", 2)) + ); + }); }); -} - -#[bench] -fn bench_no_span_no_subscriber(b: &mut Bencher) { - b.iter(|| {}); -} - -#[bench] -fn bench_1_atomic_load(b: &mut Bencher) { // This is just included as a baseline. - use std::sync::atomic::{AtomicUsize, Ordering}; - let foo = AtomicUsize::new(1); - b.iter(|| foo.load(Ordering::Relaxed)); + c.bench_function("bench_no_span_no_subscriber", |b| { + b.iter(|| {}); + }); + c.bench_function("bench_1_atomic_load", |b| { + use std::sync::atomic::{AtomicUsize, Ordering}; + let foo = AtomicUsize::new(1); + b.iter(|| foo.load(Ordering::Relaxed)); + }); } +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/tokio-trace/benches/subscriber.rs b/tokio-trace/benches/subscriber.rs index c342a84d..117c3220 100644 --- a/tokio-trace/benches/subscriber.rs +++ b/tokio-trace/benches/subscriber.rs @@ -1,9 +1,9 @@ -#![feature(test)] - #[macro_use] extern crate tokio_trace; -extern crate test; -use test::Bencher; +#[macro_use] +extern crate criterion; + +use criterion::{black_box, Criterion}; use tokio_trace::Level; use std::{ @@ -96,63 +96,63 @@ impl tokio_trace::Subscriber for VisitingSubscriber { const N_SPANS: usize = 100; -#[bench] -fn span_no_fields(b: &mut Bencher) { - tokio_trace::subscriber::with_default(EnabledSubscriber, || { - b.iter(|| span!(Level::TRACE, "span")) +fn criterion_benchmark(c: &mut Criterion) { + c.bench_function("span_no_fields", |b| { + tokio_trace::subscriber::with_default(EnabledSubscriber, || { + b.iter(|| span!(Level::TRACE, "span")) + }); }); -} -#[bench] -fn enter_span(b: &mut Bencher) { - tokio_trace::subscriber::with_default(EnabledSubscriber, || { - let span = span!(Level::TRACE, "span"); - b.iter(|| test::black_box(span.in_scope(|| {}))) + c.bench_function("enter_span", |b| { + tokio_trace::subscriber::with_default(EnabledSubscriber, || { + let span = span!(Level::TRACE, "span"); + b.iter(|| black_box(span.in_scope(|| {}))) + }); }); -} -#[bench] -fn span_repeatedly(b: &mut Bencher) { - #[inline] - fn mk_span(i: u64) -> tokio_trace::Span { - span!(Level::TRACE, "span", i = i) - } + c.bench_function("span_repeatedly", |b| { + #[inline] + fn mk_span(i: u64) -> tokio_trace::Span { + span!(Level::TRACE, "span", i = i) + } - let n = test::black_box(N_SPANS); - tokio_trace::subscriber::with_default(EnabledSubscriber, || { - b.iter(|| (0..n).fold(mk_span(0), |_, i| mk_span(i as u64))) + let n = black_box(N_SPANS); + tokio_trace::subscriber::with_default(EnabledSubscriber, || { + b.iter(|| (0..n).fold(mk_span(0), |_, i| mk_span(i as u64))) + }); }); -} -#[bench] -fn span_with_fields(b: &mut Bencher) { - tokio_trace::subscriber::with_default(EnabledSubscriber, || { - b.iter(|| { - span!( - Level::TRACE, - "span", - foo = "foo", - bar = "bar", - baz = 3, - quuux = tokio_trace::field::debug(0.99) - ) - }) + c.bench_function("span_with_fields", |b| { + tokio_trace::subscriber::with_default(EnabledSubscriber, || { + b.iter(|| { + span!( + Level::TRACE, + "span", + foo = "foo", + bar = "bar", + baz = 3, + quuux = tokio_trace::field::debug(0.99) + ) + }) + }); }); -} -#[bench] -fn span_with_fields_record(b: &mut Bencher) { - let subscriber = VisitingSubscriber(Mutex::new(String::from(""))); - tokio_trace::subscriber::with_default(subscriber, || { - b.iter(|| { - span!( - Level::TRACE, - "span", - foo = "foo", - bar = "bar", - baz = 3, - quuux = tokio_trace::field::debug(0.99) - ) - }) + c.bench_function("span_with_fields_record", |b| { + let subscriber = VisitingSubscriber(Mutex::new(String::from(""))); + tokio_trace::subscriber::with_default(subscriber, || { + b.iter(|| { + span!( + Level::TRACE, + "span", + foo = "foo", + bar = "bar", + baz = 3, + quuux = tokio_trace::field::debug(0.99) + ) + }) + }); }); } + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); |