Fix benchmarks

This commit is contained in:
Romain Ruetschi
2019-07-23 11:29:12 +02:00
parent e7ce8c81db
commit c5f9ea9136
3 changed files with 154 additions and 138 deletions

View File

@ -16,6 +16,20 @@ readme = "README.md"
keywords = ["merkle", "merkle-tree"]
categories = ["data-structures", "cryptography"]
[package.metadata.release]
sign-commit = true
upload-doc = true
doc-branch = "gh-pages"
pre-release-commit-message = "Release version {{version}}."
pro-release-commit-message = "Start next development iteration {{version}}."
tag-message = "Release version {{version}}."
doc-commit-message = "Update documentation."
dev-version-ext = "pre"
[[bench]]
name = "proof"
harness = false
[dependencies]
ring = "^0.16.1"
protobuf = { version = "^2.8.0", optional = true }
@ -27,18 +41,10 @@ protoc-rust = { version = "^2.8.0", optional = true }
[dev-dependencies]
serde_json = "1.0.40"
criterion = "0.2.11"
rand = "0.7.0"
[features]
serialization-protobuf = [ "protobuf", "protoc-rust" ]
serialization-serde = [ "serde", "serde_derive" ]
[package.metadata.release]
sign-commit = true
upload-doc = true
doc-branch = "gh-pages"
pre-release-commit-message = "Release version {{version}}."
pro-release-commit-message = "Start next development iteration {{version}}."
tag-message = "Release version {{version}}."
doc-commit-message = "Update documentation."
dev-version-ext = "pre"

View File

@ -1,128 +0,0 @@
// #![feature(test)]
// #![feature(rand)]
// extern crate rand;
// extern crate test;
// extern crate merkle;
// extern crate ring;
// use rand::Rng;
// use test::Bencher;
// use ring::digest::{Algorithm, SHA512};
// use merkle::MerkleTree;
// #[allow(non_upper_case_globals)]
// static digest: &'static Algorithm = &SHA512;
// #[bench]
// fn bench_small_str_tree(b: &mut Bencher) {
// let values = vec!["one", "two", "three", "four"];
// b.iter(|| MerkleTree::from_vec(digest, values.clone()));
// }
// #[bench]
// fn bench_small_str_proof_gen(b: &mut Bencher) {
// let values = vec!["one", "two", "three", "four"];
// let tree = MerkleTree::from_vec(digest, values.clone());
// b.iter(|| {
// for value in &values {
// let proof = tree.gen_proof(value);
// test::black_box(proof);
// }
// });
// }
// #[bench]
// fn bench_small_str_proof_check(b: &mut Bencher) {
// let values = vec!["one", "two", "three", "four"];
// let tree = MerkleTree::from_vec(digest, values.clone());
// let proofs = values
// .iter()
// .map(|v| tree.gen_proof(v).unwrap())
// .collect::<Vec<_>>();
// b.iter(|| {
// for proof in &proofs {
// test::black_box(proof.validate(tree.root_hash()));
// }
// });
// }
// #[bench]
// fn bench_big_rnd_tree(b: &mut Bencher) {
// let mut values = vec![vec![0u8; 256]; 160];
// let mut rng = rand::IsaacRng::new_unseeded();
// for mut v in &mut values {
// rng.fill_bytes(&mut v);
// }
// b.iter(|| {
// let tree = MerkleTree::from_vec(digest, values.clone());
// test::black_box(tree)
// });
// }
// #[bench]
// fn bench_big_rnd_proof_gen(b: &mut Bencher) {
// let mut values = vec![vec![0u8; 256]; 160];
// let mut rng = rand::IsaacRng::new_unseeded();
// for mut v in &mut values {
// rng.fill_bytes(&mut v);
// }
// let tree = MerkleTree::from_vec(digest, values.clone());
// b.iter(|| {
// for value in &values {
// let proof = tree.gen_proof(value.clone());
// test::black_box(proof);
// }
// });
// }
// #[bench]
// fn bench_big_rnd_proof_check(b: &mut Bencher) {
// let mut values = vec![vec![0u8; 256]; 160];
// let mut rng = rand::IsaacRng::new_unseeded();
// for mut v in &mut values {
// rng.fill_bytes(&mut v);
// }
// let tree = MerkleTree::from_vec(digest, values.clone());
// let proofs = values
// .into_iter()
// .map(|v| tree.gen_proof(v).unwrap())
// .collect::<Vec<_>>();
// b.iter(|| {
// for proof in &proofs {
// test::black_box(proof.validate(tree.root_hash()));
// }
// });
// }
// #[bench]
// fn bench_big_rnd_iter(b: &mut Bencher) {
// let mut values = vec![vec![0u8; 256]; 160];
// let mut rng = rand::IsaacRng::new_unseeded();
// for mut v in &mut values {
// rng.fill_bytes(&mut v);
// }
// let tree = MerkleTree::from_vec(digest, values.clone());
// b.iter(|| {
// for value in &tree {
// test::black_box(value);
// }
// });
// }

138
benches/proof.rs Normal file
View File

@ -0,0 +1,138 @@
#[macro_use]
extern crate criterion;
use criterion::black_box;
use criterion::Criterion;
extern crate merkle;
extern crate rand;
extern crate ring;
use merkle::MerkleTree;
use rand::RngCore;
use ring::digest::{Algorithm, SHA512};
static DIGEST: &'static Algorithm = &SHA512;
fn bench_small_str_tree(c: &mut Criterion) {
c.bench_function("MerkleTree::from_bec - small", |b| {
let values = vec!["one", "two", "three", "four"];
b.iter(|| MerkleTree::from_vec(DIGEST, black_box(values.clone())))
});
}
fn bench_small_str_proof_gen(c: &mut Criterion) {
c.bench_function("MerkleTree::gen_proof - small", |b| {
let values = vec!["one", "two", "three", "four"];
let tree = MerkleTree::from_vec(DIGEST, values.clone());
b.iter(|| {
for value in &values {
tree.gen_proof(black_box(value));
}
})
});
}
fn bench_small_str_proof_check(c: &mut Criterion) {
c.bench_function("MerkleTree::validate_proof - small", |b| {
let values = vec!["one", "two", "three", "four"];
let tree = MerkleTree::from_vec(DIGEST, values.clone());
let proofs = values
.iter()
.map(|v| tree.gen_proof(v).unwrap())
.collect::<Vec<_>>();
b.iter(|| {
for proof in &proofs {
proof.validate(black_box(tree.root_hash()));
}
})
});
}
fn bench_big_rnd_tree(c: &mut Criterion) {
c.bench_function("MerkleTree::from_vec - big", |b| {
let mut values = vec![vec![0u8; 256]; 160];
let mut rng = rand::thread_rng();
for mut v in &mut values {
rng.fill_bytes(&mut v);
}
b.iter(|| MerkleTree::from_vec(DIGEST, black_box(values.clone())))
});
}
fn bench_big_rnd_proof_gen(c: &mut Criterion) {
c.bench_function("MerkleTree::gen_proof - big", |b| {
let mut values = vec![vec![0u8; 256]; 160];
let mut rng = rand::thread_rng();
for mut v in &mut values {
rng.fill_bytes(&mut v);
}
let tree = MerkleTree::from_vec(DIGEST, values.clone());
b.iter(|| {
for value in &values {
tree.gen_proof(black_box(value.clone()));
}
})
});
}
fn bench_big_rnd_proof_check(c: &mut Criterion) {
c.bench_function("MerkleTree::validate_proof - big", |b| {
let mut values = vec![vec![0u8; 256]; 160];
let mut rng = rand::thread_rng();
for mut v in &mut values {
rng.fill_bytes(&mut v);
}
let tree = MerkleTree::from_vec(DIGEST, values.clone());
let proofs = values
.into_iter()
.map(|v| tree.gen_proof(v).unwrap())
.collect::<Vec<_>>();
b.iter(|| {
for proof in &proofs {
proof.validate(black_box(tree.root_hash()));
}
})
});
}
fn bench_big_rnd_iter(c: &mut Criterion) {
c.bench_function("MerkleTree::iter - big", |b| {
let mut values = vec![vec![0u8; 256]; 160];
let mut rng = rand::thread_rng();
for mut v in &mut values {
rng.fill_bytes(&mut v);
}
let tree = MerkleTree::from_vec(DIGEST, values.clone());
b.iter(|| {
for value in &tree {
black_box(value);
}
})
});
}
criterion_group!(
benches,
bench_small_str_tree,
bench_small_str_proof_gen,
bench_small_str_proof_check,
bench_big_rnd_tree,
bench_big_rnd_proof_gen,
bench_big_rnd_proof_check,
bench_big_rnd_iter,
);
criterion_main!(benches);