Skip to content

Commit e6e64f3

Browse files
committed
feat(bench): add performance consistency analysis to latency statistics
Added automated analysis of latency statistics with three key metrics: 1. Consistency (p99/p50 ratio) - predictability measure 2. Variance (stddev % of p50) - stability measure 3. Outliers (max/p99 ratio) - tail latency measure Each metric includes interpretation thresholds to help users quickly identify performance issues.
1 parent db37106 commit e6e64f3

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

src/bin/bench_throughput.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,52 @@ fn print_template_results(template_name: &str, results: &[BenchmarkResult]) {
594594
format_duration(stats.max),
595595
stats.stddev
596596
);
597+
598+
// Performance consistency analysis
599+
let p50_ns = stats.p50.as_nanos() as f64;
600+
let p99_ns = stats.p99.as_nanos() as f64;
601+
let max_ns = stats.max.as_nanos() as f64;
602+
603+
if p50_ns > 0.0 {
604+
let p99_p50_ratio = p99_ns / p50_ns;
605+
let stddev_percent = (stats.stddev / p50_ns) * 100.0;
606+
let max_p99_ratio = max_ns / p99_ns;
607+
608+
println!(" Analysis:");
609+
610+
// Consistency (p99/p50 ratio)
611+
print!(" - Consistency: {:.2}x", p99_p50_ratio);
612+
if p99_p50_ratio < 2.0 {
613+
println!(" (excellent - very predictable)");
614+
} else if p99_p50_ratio < 3.0 {
615+
println!(" (good - mostly consistent)");
616+
} else if p99_p50_ratio < 5.0 {
617+
println!(" (fair - some variance)");
618+
} else {
619+
println!(" (poor - high variance)");
620+
}
621+
622+
// Variance (stddev %)
623+
print!(" - Variance: {:.1}%", stddev_percent);
624+
if stddev_percent < 20.0 {
625+
println!(" (low - stable)");
626+
} else if stddev_percent < 40.0 {
627+
println!(" (moderate)");
628+
} else {
629+
println!(" (high - jittery)");
630+
}
631+
632+
// Outliers (max/p99 ratio)
633+
print!(" - Outliers: {:.2}x", max_p99_ratio);
634+
if max_p99_ratio < 2.0 {
635+
println!(" (few outliers)");
636+
} else if max_p99_ratio < 5.0 {
637+
println!(" (some outliers)");
638+
} else {
639+
println!(" (many outliers)");
640+
}
641+
}
642+
597643
println!();
598644
}
599645
}

0 commit comments

Comments
 (0)