pub fn populate_run_pooled_schbench_distribution(stats: &mut ScenarioStats)Expand description
Inject the schbench whole-run DISTRIBUTIONAL metrics (the wakeup /
request latency percentiles + min/max and the achieved-rps percentiles) into
stats.ext_metrics as the *_whole keys, re-pooled run-level by UNIONING the
per-phase per-cgroup PlatStats histograms
(stats.phases[].per_cgroup[].schbench.{wakeup,request,rps}) across EVERY
phase and EVERY cgroup, then re-deriving each percentile / min / max over the
merged histogram. PlatStats::combine is an associative bucket-count add, so
the merged histogram is the FAITHFUL union and the re-derived percentile is
the percentile OF the pooled sample set — NOT a mean of per-phase / per-cgroup
percentiles (the percentile operator is non-linear). This is the schbench
histogram analog of populate_run_distribution_metrics’s raw-sample union.
Runs in populate_run_ext_all (post-merge, after
populate_run_pooled_schbench); reads the per-phase carriers (disjoint from
the iterations / taobench / schbench loop/run-delay pools) and writes distinct
*_whole keys, so it is order-independent. Each stream’s keys are written
only when its merged histogram has samples (sample_count() > 0) — a stream
with no samples (e.g. a sub-1s run with no rps samples) reads ABSENT, never a
false 0 (mirrors the per-phase write_schbench_scalars gating and the
carrier-less graceful degradation of populate_run_distribution_metrics).
The *_whole keys are crate::stats::MetricKind::PerRunDistribution:
noise-compared per-run by crate::stats::noise_findings (each run’s own p99),
NEVER cross-RUN folded (a percentile of a union is not a mean of per-run
percentiles, and the per-phase histograms are dropped at the cross-run
boundary), so they are gated out of the cross-RUN ext fold and the within-run
reducers (is_derived). Distinct names from the per-phase percentile keys
(one registry name = one kind), produced solely here.