Skip to content

Commit 3b68189

Browse files
authored
feat(s2n-quic-core): add skip functionality to ReceiveBuffer (#2050)
1 parent c36a81c commit 3b68189

File tree

7 files changed

+329
-124
lines changed

7 files changed

+329
-124
lines changed

Diff for: quic/s2n-quic-bench/src/buffer.rs

+31-2
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,53 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
use criterion::{BenchmarkId, Criterion, Throughput};
4+
use criterion::{black_box, BenchmarkId, Criterion, Throughput};
55
use s2n_quic_core::{buffer::ReceiveBuffer, varint::VarInt};
66

77
pub fn benchmarks(c: &mut Criterion) {
88
let mut group = c.benchmark_group("buffer");
99

10-
for size in [1, 100, 1000, 1450] {
10+
for size in [1, 100, 1000, 1450, 8500, 9000] {
1111
let input = vec![42u8; size];
1212

1313
group.throughput(Throughput::Bytes(input.len() as _));
14+
15+
group.bench_with_input(BenchmarkId::new("skip", size), &input, |b, _input| {
16+
let mut buffer = ReceiveBuffer::new();
17+
b.iter(move || {
18+
buffer.skip(black_box(size)).unwrap();
19+
});
20+
});
21+
1422
group.bench_with_input(BenchmarkId::new("write_at", size), &input, |b, input| {
1523
let mut buffer = ReceiveBuffer::new();
1624
let mut offset = VarInt::from_u8(0);
1725
let len = VarInt::new(input.len() as _).unwrap();
1826
b.iter(move || {
1927
buffer.write_at(offset, input).unwrap();
28+
while buffer.pop().is_some() {}
2029
offset += len;
2130
});
2231
});
32+
33+
// we double the writes in the fragment test
34+
group.throughput(Throughput::Bytes((input.len() * 2) as _));
35+
group.bench_with_input(
36+
BenchmarkId::new("write_at_fragmented", size),
37+
&input,
38+
|b, input| {
39+
let mut buffer = ReceiveBuffer::new();
40+
let mut offset = VarInt::from_u8(0);
41+
let len = VarInt::new(input.len() as _).unwrap();
42+
b.iter(move || {
43+
let first_offset = offset + len;
44+
buffer.write_at(first_offset, input).unwrap();
45+
let second_offset = offset;
46+
buffer.write_at(second_offset, input).unwrap();
47+
while buffer.pop().is_some() {}
48+
offset = first_offset + len;
49+
});
50+
},
51+
);
2352
}
2453
}

0 commit comments

Comments
 (0)