63 lines
2.0 KiB
Rust
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()
|
|
}
|