aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml6
-rw-r--r--benches/analyzers.rs65
-rw-r--r--benches/parsing_benchmark.rs20
3 files changed, 85 insertions, 6 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 15e7e52..95272aa 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,9 +21,13 @@ default = []
name = "parsing_benchmark"
harness = false
+[[bench]]
+name = "analyzers"
+harness = false
+
[dev-dependencies]
serde_json = "1.0"
-criterion = "0.3"
+criterion = { version = "0.3", features = ["html_reports"] }
[dependencies]
num-traits = "0.2"
diff --git a/benches/analyzers.rs b/benches/analyzers.rs
new file mode 100644
index 0000000..ee25253
--- /dev/null
+++ b/benches/analyzers.rs
@@ -0,0 +1,65 @@
+use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
+use evtclib::Compression;
+
+macro_rules! analyzer_benchmark {
+ ($fname:ident, $boss:expr, $log:expr) => {
+ fn $fname(c: &mut Criterion) {
+ let log = evtclib::process_file($log, Compression::Zip).unwrap();
+ let analyzer = log.analyzer().unwrap();
+
+ let mut group = c.benchmark_group(&format!("analyzers/{}", $boss));
+ group.throughput(Throughput::Elements(1));
+
+ group.bench_function("is_cm", |b| {
+ b.iter(|| {
+ black_box(analyzer.is_cm());
+ })
+ });
+
+ group.bench_function("outcome", |b| {
+ b.iter(|| {
+ black_box(analyzer.outcome());
+ })
+ });
+ group.finish();
+ }
+ };
+}
+
+macro_rules! benchmarks {
+ ($(($fname:ident, $boss:expr, $log:expr),)*) => {
+ $(analyzer_benchmark!($fname, $boss, $log);)*
+
+ criterion_group! {
+ name = benches;
+ config = Criterion::default();
+ targets = $($fname,)*
+ }
+
+ criterion_main!(benches);
+ }
+}
+
+benchmarks! {
+ (raid_generic, "generic-raid", "tests/logs/vg-20200421.zevtc"),
+ (raid_xera, "xera", "tests/logs/xera-20200415.zevtc"),
+ (raid_cairn, "cairn", "tests/logs/cairn-20200426.zevtc"),
+ (raid_mo, "mo", "tests/logs/mo-20200426.zevtc"),
+ (raid_samarog, "samarog", "tests/logs/samarog-20200426.zevtc"),
+ (raid_deimos, "deimos", "tests/logs/deimos-20200428.zevtc"),
+ (raid_sh, "sh", "tests/logs/desmina-20200425.zevtc"),
+ (raid_river, "river", "tests/logs/river-20210412.zevtc"),
+ (raid_dhuum, "dhuum", "tests/logs/dhuum-20200428.zevtc"),
+ (raid_ca, "ca", "tests/logs/ca-20200426.zevtc"),
+ (raid_largos, "largos", "tests/logs/largos-20200426.zevtc"),
+ (raid_qadim, "qadim", "tests/logs/qadim-20200427.zevtc"),
+ (raid_adina, "adina", "tests/logs/adina-20200427.zevtc"),
+ (raid_sabir, "sabir", "tests/logs/sabir-20200427.zevtc"),
+ (raid_qadimp, "qadimp", "tests/logs/qadimp-20200427.zevtc"),
+
+ (fractal_generic, "generic-fractal", "tests/logs/ensolyss-20200427.zevtc"),
+ (fractal_ai, "ai", "tests/logs/ai-20200922.zevtc"),
+ (fractal_skorvald, "skorvald", "tests/logs/skorvald-20200920.zevtc"),
+
+ (strike_generic, "generic-strike", "tests/logs/whisper-20200424.zevtc"),
+}
diff --git a/benches/parsing_benchmark.rs b/benches/parsing_benchmark.rs
index 1e81e3c..4174cab 100644
--- a/benches/parsing_benchmark.rs
+++ b/benches/parsing_benchmark.rs
@@ -1,4 +1,4 @@
-use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
use std::{fs, io, io::Read};
use zip::ZipArchive;
@@ -11,7 +11,11 @@ const QADIM_LOG: &str = "tests/logs/qadim-20200427.zevtc";
/// (such as a buffered reader or a memory mapped file) so that the downstream application will
/// receive the log fast.
fn zipped_qadim_benchmark(c: &mut Criterion) {
- c.bench_function("on-disk zipped Qadim", |b| {
+ let file_size = fs::metadata(QADIM_LOG).unwrap().len();
+ let mut group = c.benchmark_group("parsing/qadim/zipped");
+
+ group.throughput(Throughput::Bytes(file_size));
+ group.bench_function("disk", |b| {
b.iter(|| evtclib::process_file(black_box(QADIM_LOG), evtclib::Compression::Zip).unwrap())
});
}
@@ -24,8 +28,11 @@ fn zipped_qadim_benchmark(c: &mut Criterion) {
/// have to de-compress logs at some point.
fn zipped_qadim_ram_benchmark(c: &mut Criterion) {
let log_data = &fs::read(QADIM_LOG).unwrap();
+ let file_size = log_data.len();
+ let mut group = c.benchmark_group("parsing/qadim/zipped");
- c.bench_function("in-memory zipped Qadim", |b| {
+ group.throughput(Throughput::Bytes(file_size as u64));
+ group.bench_function("memory", |b| {
b.iter(|| {
evtclib::process_stream(io::Cursor::new(log_data), evtclib::Compression::Zip).unwrap()
})
@@ -48,7 +55,10 @@ fn unzipped_qadim_benchmark(c: &mut Criterion) {
.unwrap();
let log_data = &log_data;
- c.bench_function("in-memory unzipped Qadim", |b| {
+ let mut group = c.benchmark_group("parsing/qadim/unzipped");
+
+ group.throughput(Throughput::Bytes(log_data.len() as u64));
+ group.bench_function("memory", |b| {
b.iter(|| {
evtclib::process_stream(io::Cursor::new(log_data), evtclib::Compression::None).unwrap()
})
@@ -66,7 +76,7 @@ fn process_qadim(c: &mut Criterion) {
let file = io::BufReader::new(fs::File::open(QADIM_LOG).unwrap());
let raw_evtc = evtclib::raw::parse_zip(file).unwrap();
- c.bench_function("process Qadim", |b| {
+ c.bench_function("process/qadim", |b| {
b.iter(|| evtclib::process(&raw_evtc).unwrap())
});
}