Skip to content

Commit cabb871

Browse files
committed
Add a BufReader benchmark for reads smaller than the buffer
1 parent d1280af commit cabb871

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

collector/runtime-benchmarks/Cargo.lock

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+5-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
[workspace]
2-
members = ["hashmap", "nbody"]
2+
members = [
3+
"hashmap",
4+
"nbody",
5+
"bufreader",
6+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "bufreader"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
benchlib = { path = "../../benchlib" }
10+
snap = "1.0.5"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use benchlib::benchmark::{black_box, BenchmarkSuite};
2+
use snap::{read::FrameDecoder, write::FrameEncoder};
3+
use std::io::{BufRead, BufReader, Write};
4+
5+
const BYTES: usize = 64 * 1024 * 1024;
6+
7+
fn main() {
8+
let mut suite = BenchmarkSuite::new();
9+
10+
// Inspired by https://github.com/rust-lang/rust/issues/102727
11+
// The pattern we want is a BufReader which wraps a Read impl where one Read::read call will
12+
// never fill the whole BufReader buffer.
13+
suite.register("bufreader-snappy", || {
14+
let data = vec![0u8; BYTES];
15+
move || {
16+
let mut compressed = Vec::new();
17+
FrameEncoder::new(&mut compressed)
18+
.write_all(&data[..])
19+
.unwrap();
20+
let mut reader = BufReader::with_capacity(BYTES, FrameDecoder::new(&compressed[..]));
21+
22+
while let Ok(buf) = reader.fill_buf() {
23+
if buf.is_empty() {
24+
break;
25+
}
26+
black_box(buf);
27+
let len = buf.len();
28+
reader.consume(len);
29+
}
30+
}
31+
});
32+
33+
suite.run().unwrap();
34+
}

0 commit comments

Comments
 (0)