mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-24 00:00:11 +02:00
trace: Switch benchmarks to criterion (#1163)
Extracted from #1152 This makes it possible to run benchmarks on stable + gives more statistical reliability.
This commit is contained in:
committed by
Eliza Weisman
parent
aac6998c22
commit
aa99950b9c
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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"))
|
||||
});
|
||||
});
|
||||
|
||||
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(|| {})))
|
||||
});
|
||||
});
|
||||
|
||||
c.bench_function("span_repeatedly", |b| {
|
||||
#[inline]
|
||||
fn mk_span(i: u64) -> tokio_trace::Span {
|
||||
span!(Level::TRACE, "span", i = i)
|
||||
}
|
||||
|
||||
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)))
|
||||
});
|
||||
});
|
||||
|
||||
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)
|
||||
)
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
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)
|
||||
)
|
||||
})
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
#[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(|| {})))
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn span_repeatedly(b: &mut Bencher) {
|
||||
#[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)))
|
||||
});
|
||||
}
|
||||
|
||||
#[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)
|
||||
)
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
#[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)
|
||||
)
|
||||
})
|
||||
});
|
||||
}
|
||||
criterion_group!(benches, criterion_benchmark);
|
||||
criterion_main!(benches);
|
||||
|
||||
Reference in New Issue
Block a user