Skip to content

Commit ab9ef9e

Browse files
authored
Optimize benchmarks (#1760)
1 parent 3ababc3 commit ab9ef9e

13 files changed

Lines changed: 247 additions & 196 deletions
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Benchmarks for Apache Common log payload generation.
22
3-
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
3+
use criterion::{BatchSize, BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
44
use lading_payload::{Serialize, apache_common};
55
use rand::{SeedableRng, rngs::SmallRng};
66
use std::time::Duration;
@@ -12,23 +12,27 @@ fn apache_common_setup(c: &mut Criterion) {
1212
b.iter(|| {
1313
let mut rng = SmallRng::seed_from_u64(19_690_716);
1414
let _ac = apache_common::ApacheCommon::new(&mut rng);
15-
})
15+
});
1616
});
1717
}
1818

19-
fn apache_common_all(c: &mut Criterion) {
20-
let mut group = c.benchmark_group("apache_common_all");
19+
fn apache_common_throughput(c: &mut Criterion) {
20+
let mut group = c.benchmark_group("apache_common_throughput");
2121
for size in &[MIB, 10 * MIB, 100 * MIB, 1_000 * MIB] {
2222
group.throughput(Throughput::Bytes(*size as u64));
2323
group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, &size| {
24-
b.iter(|| {
25-
let mut rng = SmallRng::seed_from_u64(19_690_716);
26-
let mut ac = apache_common::ApacheCommon::new(&mut rng);
27-
let mut writer = Vec::with_capacity(size);
28-
29-
ac.to_bytes(rng, size, &mut writer)
30-
.expect("failed to convert to bytes");
31-
});
24+
b.iter_batched(
25+
|| {
26+
let mut rng = SmallRng::seed_from_u64(19_690_716);
27+
let ac = apache_common::ApacheCommon::new(&mut rng);
28+
(rng, ac, Vec::with_capacity(size))
29+
},
30+
|(rng, mut ac, mut writer)| {
31+
ac.to_bytes(rng, size, &mut writer)
32+
.expect("failed to convert to bytes");
33+
},
34+
BatchSize::PerIteration,
35+
);
3236
});
3337
}
3438
group.finish();
@@ -37,7 +41,7 @@ fn apache_common_all(c: &mut Criterion) {
3741
criterion_group!(
3842
name = setup_benches;
3943
config = Criterion::default()
40-
.measurement_time(Duration::from_secs(10))
44+
.measurement_time(Duration::from_secs(5))
4145
.warm_up_time(Duration::from_secs(1));
4246
targets = apache_common_setup,
4347
);
@@ -47,7 +51,7 @@ criterion_group!(
4751
config = Criterion::default()
4852
.measurement_time(Duration::from_secs(30))
4953
.warm_up_time(Duration::from_secs(1));
50-
targets = apache_common_all,
54+
targets = apache_common_throughput,
5155
);
5256

5357
criterion_main!(setup_benches, throughput_benches);

lading_payload/benches/ascii.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Benchmarks for ASCII payload generation.
22
3-
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
3+
use criterion::{BatchSize, BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
44
use lading_payload::{Serialize, ascii};
55
use rand::{SeedableRng, rngs::SmallRng};
66
use std::time::Duration;
@@ -12,23 +12,27 @@ fn ascii_setup(c: &mut Criterion) {
1212
b.iter(|| {
1313
let mut rng = SmallRng::seed_from_u64(19_690_716);
1414
let _dd = ascii::Ascii::new(&mut rng);
15-
})
15+
});
1616
});
1717
}
1818

19-
fn ascii_all(c: &mut Criterion) {
20-
let mut group = c.benchmark_group("ascii_all");
19+
fn ascii_throughput(c: &mut Criterion) {
20+
let mut group = c.benchmark_group("ascii_throughput");
2121
for size in &[MIB, 10 * MIB, 100 * MIB, 1_000 * MIB] {
2222
group.throughput(Throughput::Bytes(*size as u64));
2323
group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, &size| {
24-
b.iter(|| {
25-
let mut rng = SmallRng::seed_from_u64(19_690_716);
26-
let mut asc = ascii::Ascii::new(&mut rng);
27-
let mut writer = Vec::with_capacity(size);
28-
29-
asc.to_bytes(rng, size, &mut writer)
30-
.expect("failed to convert to bytes");
31-
});
24+
b.iter_batched(
25+
|| {
26+
let mut rng = SmallRng::seed_from_u64(19_690_716);
27+
let asc = ascii::Ascii::new(&mut rng);
28+
(rng, asc, Vec::with_capacity(size))
29+
},
30+
|(rng, mut asc, mut writer)| {
31+
asc.to_bytes(rng, size, &mut writer)
32+
.expect("failed to convert to bytes");
33+
},
34+
BatchSize::PerIteration,
35+
);
3236
});
3337
}
3438
group.finish();
@@ -37,7 +41,7 @@ fn ascii_all(c: &mut Criterion) {
3741
criterion_group!(
3842
name = setup_benches;
3943
config = Criterion::default()
40-
.measurement_time(Duration::from_secs(10))
44+
.measurement_time(Duration::from_secs(5))
4145
.warm_up_time(Duration::from_secs(1));
4246
targets = ascii_setup,
4347
);
@@ -47,7 +51,7 @@ criterion_group!(
4751
config = Criterion::default()
4852
.measurement_time(Duration::from_secs(30))
4953
.warm_up_time(Duration::from_secs(1));
50-
targets = ascii_all,
54+
targets = ascii_throughput,
5155
);
5256

5357
criterion_main!(setup_benches, throughput_benches);

lading_payload/benches/block.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,15 @@ fn cache_handle_creation(c: &mut Criterion) {
157157
criterion_group!(
158158
name = setup_benches;
159159
config = Criterion::default()
160-
.measurement_time(Duration::from_secs(30))
160+
.measurement_time(Duration::from_secs(5))
161161
.warm_up_time(Duration::from_secs(1));
162162
targets = cache_setup,
163163
);
164164

165165
criterion_group!(
166166
name = operations_benches;
167167
config = Criterion::default()
168-
.measurement_time(Duration::from_secs(10))
168+
.measurement_time(Duration::from_secs(5))
169169
.warm_up_time(Duration::from_secs(1));
170170
targets = cache_advance, cache_peek, cache_total_size,
171171
cache_read_at, cache_handle_creation,
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Benchmarks for Datadog Logs payload generation.
22
3-
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
3+
use criterion::{BatchSize, BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
44
use lading_payload::{DatadogLog, Serialize};
55
use rand::{SeedableRng, rngs::SmallRng};
66
use std::time::Duration;
@@ -12,23 +12,27 @@ fn datadog_logs_setup(c: &mut Criterion) {
1212
b.iter(|| {
1313
let mut rng = SmallRng::seed_from_u64(19_690_716);
1414
let _dd = DatadogLog::new(&mut rng);
15-
})
15+
});
1616
});
1717
}
1818

19-
fn datadog_logs_all(c: &mut Criterion) {
20-
let mut group = c.benchmark_group("datadog_logs_all");
19+
fn datadog_logs_throughput(c: &mut Criterion) {
20+
let mut group = c.benchmark_group("datadog_logs_throughput");
2121
for size in &[MIB, 10 * MIB, 100 * MIB, 1_000 * MIB] {
2222
group.throughput(Throughput::Bytes(*size as u64));
2323
group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, &size| {
24-
b.iter(|| {
25-
let mut rng = SmallRng::seed_from_u64(19_690_716);
26-
let mut dd = DatadogLog::new(&mut rng);
27-
let mut writer = Vec::with_capacity(size);
28-
29-
dd.to_bytes(rng, size, &mut writer)
30-
.expect("failed to convert to bytes");
31-
});
24+
b.iter_batched(
25+
|| {
26+
let mut rng = SmallRng::seed_from_u64(19_690_716);
27+
let dd = DatadogLog::new(&mut rng);
28+
(rng, dd, Vec::with_capacity(size))
29+
},
30+
|(rng, mut dd, mut writer)| {
31+
dd.to_bytes(rng, size, &mut writer)
32+
.expect("failed to convert to bytes");
33+
},
34+
BatchSize::PerIteration,
35+
);
3236
});
3337
}
3438
group.finish();
@@ -37,7 +41,7 @@ fn datadog_logs_all(c: &mut Criterion) {
3741
criterion_group!(
3842
name = setup_benches;
3943
config = Criterion::default()
40-
.measurement_time(Duration::from_secs(10))
44+
.measurement_time(Duration::from_secs(5))
4145
.warm_up_time(Duration::from_secs(1));
4246
targets = datadog_logs_setup,
4347
);
@@ -47,7 +51,7 @@ criterion_group!(
4751
config = Criterion::default()
4852
.measurement_time(Duration::from_secs(30))
4953
.warm_up_time(Duration::from_secs(1));
50-
targets = datadog_logs_all,
54+
targets = datadog_logs_throughput,
5155
);
5256

5357
criterion_main!(setup_benches, throughput_benches);
Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
//! Benchmarks for DogStatsD payload generation.
1+
//! Benchmarks for `DogStatsD` payload generation.
22
3-
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
3+
use criterion::{BatchSize, BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
44
use lading_payload::{Serialize, dogstatsd};
55
use rand::{SeedableRng, rngs::SmallRng};
66
use std::time::Duration;
@@ -12,24 +12,28 @@ fn dogstatsd_setup(c: &mut Criterion) {
1212
b.iter(|| {
1313
let mut rng = SmallRng::seed_from_u64(19_690_716);
1414
let _dd = dogstatsd::DogStatsD::default(&mut rng);
15-
})
15+
});
1616
});
1717
}
1818

19-
fn dogstatsd_all(c: &mut Criterion) {
20-
let mut group = c.benchmark_group("dogstatsd_all");
19+
fn dogstatsd_throughput(c: &mut Criterion) {
20+
let mut group = c.benchmark_group("dogstatsd_throughput");
2121
for size in &[MIB, 10 * MIB, 100 * MIB, 1_000 * MIB] {
2222
group.throughput(Throughput::Bytes(*size as u64));
2323
group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, &size| {
24-
b.iter(|| {
25-
let mut rng = SmallRng::seed_from_u64(19_690_716);
26-
let mut dd =
27-
dogstatsd::DogStatsD::default(&mut rng).expect("failed to create DogStatsD");
28-
let mut writer = Vec::with_capacity(size);
29-
30-
dd.to_bytes(rng, size, &mut writer)
31-
.expect("failed to convert to bytes");
32-
});
24+
b.iter_batched(
25+
|| {
26+
let mut rng = SmallRng::seed_from_u64(19_690_716);
27+
let dd = dogstatsd::DogStatsD::default(&mut rng)
28+
.expect("failed to create DogStatsD");
29+
(rng, dd, Vec::with_capacity(size))
30+
},
31+
|(rng, mut dd, mut writer)| {
32+
dd.to_bytes(rng, size, &mut writer)
33+
.expect("failed to convert to bytes");
34+
},
35+
BatchSize::PerIteration,
36+
);
3337
});
3438
}
3539
group.finish();
@@ -38,7 +42,7 @@ fn dogstatsd_all(c: &mut Criterion) {
3842
criterion_group!(
3943
name = setup_benches;
4044
config = Criterion::default()
41-
.measurement_time(Duration::from_secs(10))
45+
.measurement_time(Duration::from_secs(5))
4246
.warm_up_time(Duration::from_secs(1));
4347
targets = dogstatsd_setup,
4448
);
@@ -48,7 +52,7 @@ criterion_group!(
4852
config = Criterion::default()
4953
.measurement_time(Duration::from_secs(30))
5054
.warm_up_time(Duration::from_secs(1));
51-
targets = dogstatsd_all,
55+
targets = dogstatsd_throughput,
5256
);
5357

5458
criterion_main!(setup_benches, throughput_benches);

lading_payload/benches/fluent.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Benchmarks for Fluent payload generation.
22
3-
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
3+
use criterion::{BatchSize, BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
44
use lading_payload::{Fluent, Serialize};
55
use rand::{SeedableRng, rngs::SmallRng};
66
use std::time::Duration;
@@ -12,23 +12,27 @@ fn fluent_setup(c: &mut Criterion) {
1212
b.iter(|| {
1313
let mut rng = SmallRng::seed_from_u64(19_690_716);
1414
let _f = Fluent::new(&mut rng);
15-
})
15+
});
1616
});
1717
}
1818

19-
fn fluent_all(c: &mut Criterion) {
20-
let mut group = c.benchmark_group("fluent_all");
21-
for size in &[MIB, 10 * MIB, 100 * MIB, 1_000 * MIB] {
19+
fn fluent_throughput(c: &mut Criterion) {
20+
let mut group = c.benchmark_group("fluent_throughput");
21+
for size in &[MIB, 10 * MIB, 100 * MIB] {
2222
group.throughput(Throughput::Bytes(*size as u64));
2323
group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, &size| {
24-
b.iter(|| {
25-
let mut rng = SmallRng::seed_from_u64(19_690_716);
26-
let mut ta = Fluent::new(&mut rng);
27-
let mut writer = Vec::with_capacity(size);
28-
29-
ta.to_bytes(rng, size, &mut writer)
30-
.expect("failed to convert to bytes");
31-
});
24+
b.iter_batched(
25+
|| {
26+
let mut rng = SmallRng::seed_from_u64(19_690_716);
27+
let ta = Fluent::new(&mut rng);
28+
(rng, ta, Vec::with_capacity(size))
29+
},
30+
|(rng, mut ta, mut writer)| {
31+
ta.to_bytes(rng, size, &mut writer)
32+
.expect("failed to convert to bytes");
33+
},
34+
BatchSize::PerIteration,
35+
);
3236
});
3337
}
3438
group.finish();
@@ -37,7 +41,7 @@ fn fluent_all(c: &mut Criterion) {
3741
criterion_group!(
3842
name = setup_benches;
3943
config = Criterion::default()
40-
.measurement_time(Duration::from_secs(10))
44+
.measurement_time(Duration::from_secs(5))
4145
.warm_up_time(Duration::from_secs(1));
4246
targets = fluent_setup,
4347
);
@@ -47,7 +51,7 @@ criterion_group!(
4751
config = Criterion::default()
4852
.measurement_time(Duration::from_secs(30))
4953
.warm_up_time(Duration::from_secs(1));
50-
targets = fluent_all,
54+
targets = fluent_throughput,
5155
);
5256

5357
criterion_main!(setup_benches, throughput_benches);

0 commit comments

Comments
 (0)