summaryrefslogtreecommitdiffstats
path: root/third_party/rust/neqo-transport/benches
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:14:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:14:29 +0000
commitfbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8 (patch)
tree4c1ccaf5486d4f2009f9a338a98a83e886e29c97 /third_party/rust/neqo-transport/benches
parentReleasing progress-linux version 124.0.1-1~progress7.99u1. (diff)
downloadfirefox-fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8.tar.xz
firefox-fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8.zip
Merging upstream version 125.0.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/neqo-transport/benches')
-rw-r--r--third_party/rust/neqo-transport/benches/range_tracker.rs50
-rw-r--r--third_party/rust/neqo-transport/benches/rx_stream_orderer.rs6
-rw-r--r--third_party/rust/neqo-transport/benches/transfer.rs70
3 files changed, 126 insertions, 0 deletions
diff --git a/third_party/rust/neqo-transport/benches/range_tracker.rs b/third_party/rust/neqo-transport/benches/range_tracker.rs
new file mode 100644
index 0000000000..c2f78f4874
--- /dev/null
+++ b/third_party/rust/neqo-transport/benches/range_tracker.rs
@@ -0,0 +1,50 @@
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use criterion::{criterion_group, criterion_main, Criterion}; // black_box
+use neqo_transport::send_stream::RangeTracker;
+
+const CHUNK: u64 = 1000;
+const END: u64 = 100_000;
+fn build_coalesce(len: u64) -> RangeTracker {
+ let mut used = RangeTracker::default();
+ used.mark_acked(0, CHUNK as usize);
+ used.mark_sent(CHUNK, END as usize);
+ // leave a gap or it will coalesce here
+ for i in 2..=len {
+ // These do not get immediately coalesced when marking since they're not at the end or start
+ used.mark_acked(i * CHUNK, CHUNK as usize);
+ }
+ used
+}
+
+fn coalesce(c: &mut Criterion, count: u64) {
+ c.bench_function(
+ &format!("coalesce_acked_from_zero {count}+1 entries"),
+ |b| {
+ b.iter_batched_ref(
+ || build_coalesce(count),
+ |used| {
+ used.mark_acked(CHUNK, CHUNK as usize);
+ let tail = (count + 1) * CHUNK;
+ used.mark_sent(tail, CHUNK as usize);
+ used.mark_acked(tail, CHUNK as usize);
+ },
+ criterion::BatchSize::SmallInput,
+ )
+ },
+ );
+}
+
+fn benchmark_coalesce(c: &mut Criterion) {
+ coalesce(c, 1);
+ coalesce(c, 3);
+ coalesce(c, 10);
+ coalesce(c, 1000);
+}
+
+criterion_group!(benches, benchmark_coalesce);
+criterion_main!(benches);
diff --git a/third_party/rust/neqo-transport/benches/rx_stream_orderer.rs b/third_party/rust/neqo-transport/benches/rx_stream_orderer.rs
index 03b401ba06..0a1e763e97 100644
--- a/third_party/rust/neqo-transport/benches/rx_stream_orderer.rs
+++ b/third_party/rust/neqo-transport/benches/rx_stream_orderer.rs
@@ -1,3 +1,9 @@
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
use criterion::{criterion_group, criterion_main, Criterion};
use neqo_transport::recv_stream::RxStreamOrderer;
diff --git a/third_party/rust/neqo-transport/benches/transfer.rs b/third_party/rust/neqo-transport/benches/transfer.rs
new file mode 100644
index 0000000000..444f738f9c
--- /dev/null
+++ b/third_party/rust/neqo-transport/benches/transfer.rs
@@ -0,0 +1,70 @@
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::time::Duration;
+
+use criterion::{criterion_group, criterion_main, BatchSize::SmallInput, Criterion};
+use test_fixture::{
+ boxed,
+ sim::{
+ connection::{ConnectionNode, ReceiveData, SendData},
+ network::{Delay, TailDrop},
+ Simulator,
+ },
+};
+
+const ZERO: Duration = Duration::from_millis(0);
+const JITTER: Duration = Duration::from_millis(10);
+const TRANSFER_AMOUNT: usize = 1 << 22; // 4Mbyte
+
+fn benchmark_transfer(c: &mut Criterion, label: &str, seed: Option<impl AsRef<str>>) {
+ c.bench_function(label, |b| {
+ b.iter_batched(
+ || {
+ let nodes = boxed![
+ ConnectionNode::default_client(boxed![SendData::new(TRANSFER_AMOUNT)]),
+ TailDrop::dsl_uplink(),
+ Delay::new(ZERO..JITTER),
+ ConnectionNode::default_server(boxed![ReceiveData::new(TRANSFER_AMOUNT)]),
+ TailDrop::dsl_downlink(),
+ Delay::new(ZERO..JITTER),
+ ];
+ let mut sim = Simulator::new(label, nodes);
+ if let Some(seed) = &seed {
+ sim.seed_str(seed);
+ }
+ sim.setup()
+ },
+ |sim| {
+ sim.run();
+ },
+ SmallInput,
+ )
+ });
+}
+
+fn benchmark_transfer_variable(c: &mut Criterion) {
+ benchmark_transfer(
+ c,
+ "Run multiple transfers with varying seeds",
+ std::env::var("SIMULATION_SEED").ok(),
+ );
+}
+
+fn benchmark_transfer_fixed(c: &mut Criterion) {
+ benchmark_transfer(
+ c,
+ "Run multiple transfers with the same seed",
+ Some("62df6933ba1f543cece01db8f27fb2025529b27f93df39e19f006e1db3b8c843"),
+ );
+}
+
+criterion_group! {
+ name = transfer;
+ config = Criterion::default().warm_up_time(Duration::from_secs(5)).measurement_time(Duration::from_secs(15));
+ targets = benchmark_transfer_variable, benchmark_transfer_fixed
+}
+criterion_main!(transfer);