summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Gilles <jhgilles@mit.edu>2019-06-24 15:05:45 -0400
committerEliza Weisman <eliza@buoyant.io>2019-06-24 12:05:45 -0700
commitaa99950b9c983b842bd2107bb771c277d09d495d (patch)
tree05ee5195c124b4548d499c16334acbd829ed2404
parentaac6998c22b393dd371befbc1aacc0c5f3951c1f (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.toml8
-rw-r--r--tokio-trace/benches/no_subscriber.rs66
-rw-r--r--tokio-trace/benches/subscriber.rs106
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);