Skip to content

Commit ba58b84

Browse files
committed
Add bench compare latency stats
1 parent 28d6996 commit ba58b84

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

bin/reth-bench-compare/src/comparison.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ pub(crate) struct TotalGasRow {
5757
/// - `mean_new_payload_latency_ms`: arithmetic mean latency across blocks.
5858
/// - `median_new_payload_latency_ms`: p50 latency across blocks.
5959
/// - `p90_new_payload_latency_ms` / `p99_new_payload_latency_ms`: tail latencies across blocks.
60+
/// - `std_dev_new_payload_latency_ms`: standard deviation of latency across blocks.
6061
#[derive(Debug, Clone, Serialize)]
6162
pub(crate) struct BenchmarkSummary {
6263
pub total_blocks: u64,
@@ -66,6 +67,7 @@ pub(crate) struct BenchmarkSummary {
6667
pub median_new_payload_latency_ms: f64,
6768
pub p90_new_payload_latency_ms: f64,
6869
pub p99_new_payload_latency_ms: f64,
70+
pub std_dev_new_payload_latency_ms: f64,
6971
pub gas_per_second: f64,
7072
pub blocks_per_second: f64,
7173
pub min_block_number: u64,
@@ -96,6 +98,7 @@ pub(crate) struct RefInfo {
9698
/// Percent deltas are `(feature - baseline) / baseline * 100`:
9799
/// - `new_payload_latency_p50_change_percent` / p90 / p99: percent changes of the respective
98100
/// per-block percentiles.
101+
/// - `std_dev_change_percent`: percent change in standard deviation of newPayload latency.
99102
/// - `per_block_latency_change_mean_percent` / `per_block_latency_change_median_percent` are the
100103
/// mean and median of per-block percent deltas (feature vs baseline), capturing block-level
101104
/// drift.
@@ -114,6 +117,7 @@ pub(crate) struct ComparisonSummary {
114117
pub new_payload_latency_p50_change_percent: f64,
115118
pub new_payload_latency_p90_change_percent: f64,
116119
pub new_payload_latency_p99_change_percent: f64,
120+
pub std_dev_change_percent: f64,
117121
pub gas_per_second_change_percent: f64,
118122
pub blocks_per_second_change_percent: f64,
119123
}
@@ -335,6 +339,9 @@ impl ComparisonGenerator {
335339
let mean_new_payload_latency_ms: f64 =
336340
latencies_ms.iter().sum::<f64>() / total_blocks as f64;
337341

342+
let std_dev_new_payload_latency_ms =
343+
calculate_std_dev(&latencies_ms, mean_new_payload_latency_ms);
344+
338345
let mut sorted_latencies_ms = latencies_ms;
339346
sorted_latencies_ms.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal));
340347
let median_new_payload_latency_ms = percentile(&sorted_latencies_ms, 0.5);
@@ -365,6 +372,7 @@ impl ComparisonGenerator {
365372
median_new_payload_latency_ms,
366373
p90_new_payload_latency_ms,
367374
p99_new_payload_latency_ms,
375+
std_dev_new_payload_latency_ms,
368376
gas_per_second,
369377
blocks_per_second,
370378
min_block_number,
@@ -432,6 +440,10 @@ impl ComparisonGenerator {
432440
baseline.p99_new_payload_latency_ms,
433441
feature.p99_new_payload_latency_ms,
434442
),
443+
std_dev_change_percent: calc_percent_change(
444+
baseline.std_dev_new_payload_latency_ms,
445+
feature.std_dev_new_payload_latency_ms,
446+
),
435447
gas_per_second_change_percent: calc_percent_change(
436448
baseline.gas_per_second,
437449
feature.gas_per_second,
@@ -562,6 +574,7 @@ impl ComparisonGenerator {
562574
" NewPayload Latency p99: {:+.2}%",
563575
summary.new_payload_latency_p99_change_percent
564576
);
577+
println!(" NewPayload Latency std dev: {:+.2}%", summary.std_dev_change_percent);
565578
println!(
566579
" Gas/Second: {:+.2}%",
567580
summary.gas_per_second_change_percent
@@ -584,11 +597,12 @@ impl ComparisonGenerator {
584597
);
585598
println!(" NewPayload latency (ms):");
586599
println!(
587-
" mean: {:.2}, p50: {:.2}, p90: {:.2}, p99: {:.2}",
600+
" mean: {:.2}, p50: {:.2}, p90: {:.2}, p99: {:.2}, std dev: {:.2}",
588601
baseline.mean_new_payload_latency_ms,
589602
baseline.median_new_payload_latency_ms,
590603
baseline.p90_new_payload_latency_ms,
591-
baseline.p99_new_payload_latency_ms
604+
baseline.p99_new_payload_latency_ms,
605+
baseline.std_dev_new_payload_latency_ms
592606
);
593607
if let (Some(start), Some(end)) =
594608
(&report.baseline.start_timestamp, &report.baseline.end_timestamp)
@@ -613,11 +627,12 @@ impl ComparisonGenerator {
613627
);
614628
println!(" NewPayload latency (ms):");
615629
println!(
616-
" mean: {:.2}, p50: {:.2}, p90: {:.2}, p99: {:.2}",
630+
" mean: {:.2}, p50: {:.2}, p90: {:.2}, p99: {:.2}, std dev: {:.2}",
617631
feature.mean_new_payload_latency_ms,
618632
feature.median_new_payload_latency_ms,
619633
feature.p90_new_payload_latency_ms,
620-
feature.p99_new_payload_latency_ms
634+
feature.p99_new_payload_latency_ms,
635+
feature.std_dev_new_payload_latency_ms
621636
);
622637
if let (Some(start), Some(end)) =
623638
(&report.feature.start_timestamp, &report.feature.end_timestamp)

0 commit comments

Comments
 (0)