aboutsummaryrefslogtreecommitdiffstats
path: root/src/simtest/bench.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/simtest/bench.rs')
-rw-r--r--src/simtest/bench.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/simtest/bench.rs b/src/simtest/bench.rs
index da8e322..d8c08e2 100644
--- a/src/simtest/bench.rs
+++ b/src/simtest/bench.rs
@@ -27,7 +27,7 @@ use crate::swarm::stats::{Propagation, Relay};
use crate::transport::sim::{DELIVERY_LIMIT, LinkParams};
use crate::transport::traffic::{ByKind, Counter};
-/// Writes per workload, and how many a second.
+/// Writes per workload, unless `BENCH_WRITES` says otherwise, and how many a second.
const WRITES: usize = 100;
const WRITE_EVERY: Duration = Duration::from_millis(200);
/// Longer than the tests' (`simtest::KEEPALIVE`), so that keepalives don't drown what
@@ -35,6 +35,15 @@ const WRITE_EVERY: Duration = Duration::from_millis(200);
const KEEPALIVE: Duration = Duration::from_secs(5);
/// The quiet phase: long enough to see the keepalives' rate (a STATUS every third, 15 s).
const QUIET: Duration = Duration::from_secs(20);
+/// Writes per workload: `WRITES`, or `BENCH_WRITES` (longer, to see what grows with them).
+fn writes() -> usize {
+ std::env::var("BENCH_WRITES")
+ .ok()
+ .and_then(|value| value.parse().ok())
+ .filter(|writes| *writes > 0)
+ .unwrap_or(WRITES)
+}
+
/// Only the scenarios whose names contain this, if set: `BENCH_SCENARIO=NAT`.
const ONLY: &str = "BENCH_SCENARIO";
/// If set, all scenarios at once (`BENCH_PARALLEL=1`): several times faster on many
@@ -514,7 +523,7 @@ async fn run(seed: u64, scenario: &'static Scenario) -> String {
out,
"\n{} ({} writes at {} a second each)",
scenario.name,
- WRITES,
+ writes(),
1000 / WRITE_EVERY.as_millis()
);
let mut joined = initial;
@@ -528,9 +537,9 @@ async fn run(seed: u64, scenario: &'static Scenario) -> String {
let start = Totals::of(&nodes).await;
// Before which writes the members joining in this workload start.
let joins: Vec<usize> = (1..=scenario.joining)
- .map(|k| WRITES * k / (scenario.joining + 1))
+ .map(|k| writes() * k / (scenario.joining + 1))
.collect();
- for i in 0..WRITES {
+ for i in 0..writes() {
if joins.contains(&i) {
let id = &ids[joined];
nodes.push(sim.start_on_with(
@@ -544,14 +553,14 @@ async fn run(seed: u64, scenario: &'static Scenario) -> String {
}
// The middle half, the node that goes away is gone (writing nothing).
if let Some(away) = scenario.away {
- if i == WRITES / 4 {
+ if i == writes() / 4 {
sim.net.take_down(&ids[away]);
- } else if i == WRITES * 3 / 4 {
+ } else if i == writes() * 3 / 4 {
sim.net.bring_up(&ids[away]);
}
}
let gone = scenario.away.is_some_and(|away| {
- (WRITES / 4..WRITES * 3 / 4).contains(&i) && away == i % initial
+ (writes() / 4..writes() * 3 / 4).contains(&i) && away == i % initial
});
if writer.is_none() && gone {
tokio::time::sleep(WRITE_EVERY).await;
@@ -873,7 +882,7 @@ fn report(
) {
let took = during.1.at - during.0.at;
let scale = took.as_secs_f64() / (quiet.1.at - quiet.0.at).as_secs_f64();
- let writes = WRITES as f64;
+ let writes = writes() as f64;
let _ = writeln!(
out,
" {workload}: {:.1} s, converged {} ms after the last write",