From 078e8dd4e8a82687489e6c21a0bb94a83aedd9f5 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Wed, 17 Jun 2020 02:33:25 +0200 Subject: [PATCH] Benchmark large collection of small items --- implementations/rust/Makefile | 5 +- implementations/rust/benches/.gitignore | 1 + implementations/rust/benches/codec.rs | 47 ++++++++++++++++++- implementations/rust/benches/testdata.bin.gz | Bin 0 -> 47293 bytes 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 implementations/rust/benches/.gitignore create mode 100644 implementations/rust/benches/testdata.bin.gz diff --git a/implementations/rust/Makefile b/implementations/rust/Makefile index 3e49826..684eb45 100644 --- a/implementations/rust/Makefile +++ b/implementations/rust/Makefile @@ -2,9 +2,12 @@ watch: cargo watch -c -x 'test --all-targets -- --nocapture' -bench: +bench: benches/testdata.bin cargo bench --benches +benches/testdata.bin: benches/testdata.bin.gz + gzip -dc $< > $@ + clippy-watch: cargo watch -c -x 'clippy --all-targets' diff --git a/implementations/rust/benches/.gitignore b/implementations/rust/benches/.gitignore new file mode 100644 index 0000000..800aca2 --- /dev/null +++ b/implementations/rust/benches/.gitignore @@ -0,0 +1 @@ +testdata.bin diff --git a/implementations/rust/benches/codec.rs b/implementations/rust/benches/codec.rs index 5509b5e..a011285 100644 --- a/implementations/rust/benches/codec.rs +++ b/implementations/rust/benches/codec.rs @@ -1,5 +1,5 @@ use criterion::{criterion_group, criterion_main, Criterion}; -use preserves::value::{self, decoder, encoder}; +use preserves::value::{self, decoder, encoder, reader, reader::Reader}; use preserves::{de, ser}; use std::io::Read; use std::io::BufReader; @@ -79,9 +79,52 @@ pub fn bench_ser_encoder(c: &mut Criterion) { })); } +pub fn large_testdata_decoder_with_ann(c: &mut Criterion) { + let mut fh = std::fs::File::open("benches/testdata.bin").unwrap(); + let mut bs = vec![]; + fh.read_to_end(&mut bs).ok(); + c.bench_function("decode testdata.bin with annotations", |b| b.iter(|| { + let mut r = reader::from_bytes(&bs[..]); + while let Some(_) = r.next(true).unwrap() {} + })); +} + +pub fn large_testdata_decoder_without_ann(c: &mut Criterion) { + let mut fh = std::fs::File::open("benches/testdata.bin").unwrap(); + let mut bs = vec![]; + fh.read_to_end(&mut bs).ok(); + c.bench_function("decode testdata.bin without annotations", |b| b.iter(|| { + let mut r = reader::from_bytes(&bs[..]); + while let Some(_) = r.next(false).unwrap() {} + })); +} + +pub fn large_testdata_encoder(c: &mut Criterion) { + let mut fh = std::fs::File::open("benches/testdata.bin").unwrap(); + let mut vs = vec![]; + let mut r = reader::from_read(&mut fh); + while let Some(v) = r.next(true).unwrap() { + vs.push(v); + } + + c.bench_function("encode testdata.bin", |b| b.iter_with_large_drop(|| { + let mut bs = vec![]; + let mut e = encoder::Encoder::new(&mut bs); + for v in &vs { + e.write(&v).unwrap(); + } + bs + })); +} + criterion_group!(codec, bench_decoder_bytes, bench_decoder_file, bench_decoder_buffered_file, bench_encoder); criterion_group!(serde, bench_de, bench_ser); criterion_group!(codec_then_serde, bench_decoder_de, bench_ser_encoder); -criterion_main!(codec, serde, codec_then_serde); +criterion_group!{ + name = large_testdata; + config = Criterion::default().sample_size(10); + targets = large_testdata_decoder_with_ann, large_testdata_decoder_without_ann, large_testdata_encoder +} +criterion_main!(codec, serde, codec_then_serde, large_testdata); diff --git a/implementations/rust/benches/testdata.bin.gz b/implementations/rust/benches/testdata.bin.gz new file mode 100644 index 0000000000000000000000000000000000000000..4216b79e3409e4292123d8338444e8e530c96bed GIT binary patch literal 47293 zcmeI)y)J`M0LS51Iw*sI#UQ~*8Xqwj=sk!FX!9zA#nAU?sWe z!C7r}ZM2l@>YWJ_{db$=AGJpPx)2?g=kqVa>$ysLr#c&@4yy-GN2m7}m)Z3G)Z@?R zP4WHY+ogeb;2WTTgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!H zLK2dYgd`*(2}wvo5|WUFBqSjTNk~Exl8}TXBq0e&NJ0{lkc1>8Aqh!HLK2dYgd`*( z2}wvo5|WUFBy3Z{jjxC8pmplatMXi<=_sIp0tzUgfC36Apnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4@U}7swX#sn!8Aqh!HLK2dYgd`*(2}wvo68=94o1N8KrTcAQq~jNoxdbo( literal 0 HcmV?d00001