Skip to content

Commit 4c56636

Browse files
krussmarcmo
authored andcommitted
Add bufread as an addon
1 parent fabe217 commit 4c56636

File tree

21 files changed

+860
-47
lines changed

21 files changed

+860
-47
lines changed

application/apps/indexer/Cargo.lock

Lines changed: 46 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

application/apps/indexer/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ members = [
66
"addons/someip-tools",
77
"addons/file-tools",
88
"addons/text_grep",
9+
"addons/bufread",
910
"indexer_base",
1011
"indexer_cli",
1112
"merging",
@@ -24,12 +25,10 @@ thiserror = "2.0"
2425
lazy_static = "1.5"
2526
tokio = { version = "1", features = ["full"] }
2627
tokio-stream = "0.1"
27-
#dlt-core = "0.18.0"
28-
dlt-core = { git = "https://github.com/kruss/dlt-core.git", branch = "remove_buf_redux" }
28+
dlt-core = "0.18.0"
2929
crossbeam-channel = "0.5"
3030
futures = "0.3"
3131
tokio-util = "0.7"
32-
bufread = { git = "https://github.com/kruss/bufread" }
3332
regex = "1"
3433
grep-regex = "0.1"
3534
rand = "0.8"
@@ -45,6 +44,7 @@ envvars = "0.1"
4544
# Support for `html_reports` needs running the benchmarks via `cargo-criterion` tool.
4645
criterion = { version = "0.5", features = ["html_reports"] }
4746
insta = { version = "1.41", features = ["yaml"] }
47+
proptest = "1.6"
4848

4949
# `insta` crate and its dependency `similar` will be compiled once and run many times,
5050
# therefore it's suggested to compile them with more optimizations for faster runs.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[package]
2+
name = "bufread"
3+
version = "0.1.1"
4+
edition = "2021"
5+
6+
[dependencies]
7+
8+
[dev-dependencies]
9+
criterion.workspace = true
10+
proptest.workspace = true
11+
rand.workspace = true
12+
13+
[[bench]]
14+
name = "buffer_benches"
15+
harness = false
16+
17+
[[bench]]
18+
name = "reader_benches"
19+
harness = false
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# bufread
2+
A buffered reader implementation in Rust with special behavior.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use criterion::Criterion;
2+
use std::time::Duration;
3+
4+
pub fn bench_config(sample_size: usize) -> Criterion {
5+
Criterion::default()
6+
.warm_up_time(Duration::from_secs(5))
7+
.measurement_time(Duration::from_secs(10))
8+
.sample_size(sample_size)
9+
.significance_level(0.01)
10+
.noise_threshold(0.05)
11+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use criterion::{criterion_group, criterion_main, Criterion};
2+
use std::hint::black_box;
3+
4+
#[path = "./bench_config.rs"]
5+
mod bench_config;
6+
use bench_config::bench_config;
7+
8+
use bufread::DeqBuffer;
9+
10+
fn write_buffer(buffer: &mut DeqBuffer, src: &[u8]) {
11+
while buffer.write_available() >= src.len() {
12+
buffer.write_from(src);
13+
}
14+
}
15+
16+
fn write_buffer_benchmark(c: &mut Criterion) {
17+
let mut buffer = DeqBuffer::new(50 * 1000);
18+
let src: [u8; 100] = [1; 100];
19+
20+
c.bench_function("write_buffer", |b| {
21+
b.iter(|| write_buffer(black_box(&mut buffer), black_box(&src)))
22+
});
23+
}
24+
25+
fn write_read_buffer(buffer: &mut DeqBuffer, src: &[u8], dst: &mut [u8]) {
26+
while buffer.write_available() >= src.len() {
27+
buffer.write_from(src);
28+
}
29+
while buffer.read_available() != 0 {
30+
buffer.read_to(dst);
31+
}
32+
}
33+
34+
fn write_read_buffer_benchmark(c: &mut Criterion) {
35+
let mut buffer = DeqBuffer::new(50 * 1000);
36+
let src: [u8; 100] = [1; 100];
37+
let mut dst: [u8; 100] = [1; 100];
38+
39+
c.bench_function("write_read_buffer", |b| {
40+
b.iter(|| write_read_buffer(black_box(&mut buffer), black_box(&src), black_box(&mut dst)))
41+
});
42+
}
43+
44+
criterion_group! {
45+
name = benches;
46+
config = bench_config(1000);
47+
targets = write_buffer_benchmark, write_read_buffer_benchmark
48+
}
49+
50+
criterion_main!(benches);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#![allow(dead_code)]
2+
3+
use criterion::{criterion_group, criterion_main, Criterion};
4+
use std::hint::black_box;
5+
6+
#[path = "./bench_config.rs"]
7+
mod bench_config;
8+
use bench_config::bench_config;
9+
10+
#[path = "../tests/proto.rs"]
11+
mod proto;
12+
13+
use bufread::BufReader;
14+
use proto::{Parser, Source, MAX_PACKET_LEN};
15+
16+
fn proto_benchmark(c: &mut Criterion) {
17+
let source_min_size = 100 * MAX_PACKET_LEN;
18+
let buffer_max_size = 3 * MAX_PACKET_LEN;
19+
let buffer_min_size = MAX_PACKET_LEN;
20+
21+
let source = Source::fixed(source_min_size);
22+
let reader = BufReader::new(buffer_max_size, buffer_min_size, source.data());
23+
let mut parser = Parser::new(reader);
24+
25+
c.bench_function("proto", |b| b.iter(|| Parser::run(black_box(&mut parser))));
26+
}
27+
28+
criterion_group! {
29+
name = benches;
30+
config = bench_config(1000);
31+
targets = proto_benchmark
32+
}
33+
34+
criterion_main!(benches);

0 commit comments

Comments
 (0)