diff options
author | Nora Widdecke <nora@sequoia-pgp.org> | 2021-02-12 17:50:15 +0100 |
---|---|---|
committer | Nora Widdecke <nora@sequoia-pgp.org> | 2021-02-15 16:44:31 +0100 |
commit | c113ea86b6662850651949f7be3b6dcec3d97b47 (patch) | |
tree | 7b7ea006a3f42a9fafeebab041e1a7a5a4127030 | |
parent | 09c40ae8cb9969253de7320ee38c0ce950391a4f (diff) |
bench: Add benchmark generate_certs.
-rw-r--r-- | openpgp/Cargo.toml | 6 | ||||
-rw-r--r-- | openpgp/benches/generate_cert.rs | 36 | ||||
-rw-r--r-- | openpgp/benches/parse_cert.rs | 30 | ||||
-rw-r--r-- | openpgp/benches/read_keys.rs | 25 |
4 files changed, 71 insertions, 26 deletions
diff --git a/openpgp/Cargo.toml b/openpgp/Cargo.toml index 8381e02c..67509ce2 100644 --- a/openpgp/Cargo.toml +++ b/openpgp/Cargo.toml @@ -86,5 +86,9 @@ name = "pad" required-features = ["compression-deflate"] [[bench]] -name = "read_keys" +name = "generate_cert" +harness = false + +[[bench]] +name = "parse_cert" harness = false diff --git a/openpgp/benches/generate_cert.rs b/openpgp/benches/generate_cert.rs new file mode 100644 index 00000000..3f5def86 --- /dev/null +++ b/openpgp/benches/generate_cert.rs @@ -0,0 +1,36 @@ +use criterion::{criterion_group, criterion_main, Criterion}; + +use sequoia_openpgp::cert::{CertBuilder, CipherSuite}; + +fn generate_cert(cipher: CipherSuite) { + // Parse the cert, ignore any errors + let _ = CertBuilder::general_purpose( + cipher, + Some("Alice Lovelace <alice@example.org>"), + ) + .generate(); +} + +fn bench_generate_certs(c: &mut Criterion) { + let mut group = c.benchmark_group("generate cert"); + let cipher = CipherSuite::Cv25519; + group.bench_function(format!("{:?}", cipher), |b| { + b.iter(|| generate_cert(cipher)) + }); + let cipher = CipherSuite::P256; + group.bench_function(format!("{:?}", cipher), |b| { + b.iter(|| generate_cert(cipher)) + }); + let cipher = CipherSuite::P384; + group.bench_function(format!("{:?}", cipher), |b| { + b.iter(|| generate_cert(cipher)) + }); + let cipher = CipherSuite::P521; + group.bench_function(format!("{:?}", cipher), |b| { + b.iter(|| generate_cert(cipher)) + }); + group.finish(); +} + +criterion_group!(benches, bench_generate_certs); +criterion_main!(benches); diff --git a/openpgp/benches/parse_cert.rs b/openpgp/benches/parse_cert.rs new file mode 100644 index 00000000..bc67062d --- /dev/null +++ b/openpgp/benches/parse_cert.rs @@ -0,0 +1,30 @@ +use criterion::{criterion_group, criterion_main, Criterion, Throughput}; + +use sequoia_openpgp::cert::Cert; +use sequoia_openpgp::parse::Parse; + +use std::convert::TryInto; + +fn read_cert(bytes: &[u8]) { + // Parse the cert, ignore any errors + let _ = Cert::from_bytes(bytes); +} + +macro_rules! bench_parse_cert { + ( $filename: expr, $group: expr ) => { + let bytes = include_bytes!(concat!("../tests/data/keys/", $filename)); + $group.throughput(Throughput::Bytes(bytes.len().try_into().unwrap())); + $group.bench_function($filename, |b| b.iter(|| read_cert(bytes))); + }; +} +fn bench_parse_certs(c: &mut Criterion) { + let mut group = c.benchmark_group("parse flooded cert"); + bench_parse_cert!("dkg.gpg", group); + group.finish(); + let mut group = c.benchmark_group("parse typical cert"); + bench_parse_cert!("neal.pgp", group); + group.finish(); +} + +criterion_group!(benches, bench_parse_certs); +criterion_main!(benches); diff --git a/openpgp/benches/read_keys.rs b/openpgp/benches/read_keys.rs deleted file mode 100644 index c5bc9d1f..00000000 --- a/openpgp/benches/read_keys.rs +++ /dev/null @@ -1,25 +0,0 @@ -use criterion::{criterion_group, criterion_main, Criterion}; - -use sequoia_openpgp::cert::Cert; -use sequoia_openpgp::parse::Parse; - -fn read_key(bytes: &[u8]) { - // Parse the cert, ignore any errors - let _ = Cert::from_bytes(bytes); -} - -macro_rules! bench_parse_key { - ( $filename: expr, $group: expr ) => { - let bytes = include_bytes!(concat!("../tests/data/keys/", $filename)); - $group.bench_function($filename, |b| b.iter(|| read_key(bytes))); - }; -} -fn bench_read_keys(c: &mut Criterion) { - let mut group = c.benchmark_group("read keys"); - bench_parse_key!("dkg.gpg", group); - bench_parse_key!("neal.pgp", group); - group.finish(); -} - -criterion_group!(benches, bench_read_keys); -criterion_main!(benches); |