Skip to content

Commit b327ff8

Browse files
committed
Use criterion-linux-perf to perform benchmark measuring instructions
1 parent 2251be3 commit b327ff8

File tree

3 files changed

+40
-9
lines changed

3 files changed

+40
-9
lines changed

bench/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ publish = false
66

77
[dependencies]
88
criterion = "0.3"
9+
criterion-linux-perf = "0.1.0"
910
memmem = "0.1"
1011
sliceslice = { path = ".." }
1112
sse4-strstr = { path = "sse4-strstr", optional = true }

bench/benches/i386.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
use criterion::{black_box, criterion_group, criterion_main, Criterion};
1+
use criterion::{
2+
black_box, criterion_group, criterion_main,
3+
measurement::{Measurement, WallTime},
4+
Criterion,
5+
};
6+
use criterion_linux_perf::{PerfMeasurement, PerfMode};
27
use memmem::{Searcher, TwoWaySearcher};
38
use std::{
49
fs::File,
510
io::{BufRead, BufReader},
611
};
712

8-
fn search_short_haystack(c: &mut Criterion) {
13+
fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
914
let mut needles = BufReader::new(File::open("../data/words.txt").unwrap())
1015
.lines()
1116
.map(Result::unwrap)
@@ -88,7 +93,7 @@ fn search_short_haystack(c: &mut Criterion) {
8893
group.finish();
8994
}
9095

91-
fn search_long_haystack(c: &mut Criterion) {
96+
fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
9297
let haystack = include_str!("../../data/haystack");
9398

9499
let needles = BufReader::new(File::open("../data/words.txt").unwrap())
@@ -161,5 +166,15 @@ fn search_long_haystack(c: &mut Criterion) {
161166
group.finish();
162167
}
163168

164-
criterion_group!(benches, search_short_haystack, search_long_haystack);
165-
criterion_main!(benches);
169+
criterion_group!(
170+
name = i386_wall_time;
171+
config = Criterion::default().with_measurement(WallTime);
172+
targets = search_short_haystack, search_long_haystack
173+
);
174+
criterion_group!(
175+
name = i386_perf_instructions;
176+
config = Criterion::default().with_measurement(PerfMeasurement::new(PerfMode::Instructions));
177+
targets = search_short_haystack, search_long_haystack
178+
);
179+
180+
criterion_main!(i386_wall_time, i386_perf_instructions);

bench/benches/random.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
1+
use criterion::{
2+
black_box, criterion_group, criterion_main,
3+
measurement::{Measurement, WallTime},
4+
BenchmarkId, Criterion,
5+
};
6+
use criterion_linux_perf::{PerfMeasurement, PerfMode};
27
use memmem::{Searcher, TwoWaySearcher};
38

4-
fn search(c: &mut Criterion) {
9+
fn search<M: Measurement>(c: &mut Criterion<M>) {
510
let haystack = include_str!("../../data/haystack");
611
let needle = include_str!("../../data/needle");
712

@@ -75,5 +80,15 @@ fn search(c: &mut Criterion) {
7580
}
7681
}
7782

78-
criterion_group!(benches, search);
79-
criterion_main!(benches);
83+
criterion_group!(
84+
name = random_wall_time;
85+
config = Criterion::default().with_measurement(WallTime);
86+
targets = search
87+
);
88+
criterion_group!(
89+
name = random_perf_instructions;
90+
config = Criterion::default().with_measurement(PerfMeasurement::new(PerfMode::Instructions));
91+
targets = search
92+
);
93+
94+
criterion_main!(random_wall_time, random_perf_instructions);

0 commit comments

Comments
 (0)