Files
crank/crates/crank-metrics/tests/overhead.rs
T

63 lines
2.0 KiB
Rust

use std::{
hint::black_box,
time::{Duration, Instant},
};
use crank_metrics::{CacheOutcome, record_cache_outcome};
use metrics_util::debugging::DebuggingRecorder;
const SAMPLES: usize = 40;
const WORK_UNITS: u64 = 500_000;
#[test]
fn reproducible_foundation_profile_stays_inside_latency_and_cpu_proxy_budgets() {
let recorder = DebuggingRecorder::new();
let snapshotter = recorder.snapshotter();
let mut baseline = Vec::with_capacity(SAMPLES);
let mut enabled = Vec::with_capacity(SAMPLES);
metrics::with_local_recorder(&recorder, || {
for index in 0..SAMPLES {
if index % 2 == 0 {
baseline.push(sample(false));
enabled.push(sample(true));
} else {
enabled.push(sample(true));
baseline.push(sample(false));
}
}
});
baseline.sort_unstable();
enabled.sort_unstable();
let baseline_p95 = baseline[SAMPLES * 95 / 100];
let enabled_p95 = enabled[SAMPLES * 95 / 100];
let baseline_cpu: Duration = baseline.iter().copied().sum();
let enabled_cpu: Duration = enabled.iter().copied().sum();
let series = snapshotter.snapshot().into_vec().len();
println!(
"metrics_profile_v1 samples={SAMPLES} work_units={WORK_UNITS} baseline_p95_ns={} enabled_p95_ns={} baseline_cpu_ns={} enabled_cpu_ns={} logical_series={series}",
baseline_p95.as_nanos(),
enabled_p95.as_nanos(),
baseline_cpu.as_nanos(),
enabled_cpu.as_nanos()
);
assert!(enabled_p95.as_nanos() * 100 <= baseline_p95.as_nanos() * 105);
assert!(enabled_cpu.as_nanos() * 100 <= baseline_cpu.as_nanos() * 110);
assert_eq!(series, 1);
}
fn sample(with_metrics: bool) -> Duration {
let started = Instant::now();
let mut value = 0x9e37_79b9_u64;
for index in 0..WORK_UNITS {
value = value.rotate_left(7) ^ index.wrapping_mul(0x100_0000_01b3);
}
black_box(value);
if with_metrics {
record_cache_outcome(CacheOutcome::Hit);
}
started.elapsed()
}