feat: freeze typed metrics registry and bounded exemplars
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user