@@ -48,6 +48,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4848 ` -d:BenchMupmucRuns=N ` , ` -d:BenchMupmucWarmup=N ` ,
4949 ` -d:BenchChannelsRuns=N ` , ` -d:BenchChannelsWarmup=N ` . Defaults match
5050 the prior hard-coded ` runs = 10 ` , so production runs are unchanged.
51+ - ` bench_latency ` now emits Bencher Metric Format JSON natively via
52+ ` --bmf-out=<path> ` , mirroring ` bench_throughput ` 's CLI surface (PR 1).
53+ Positional args filter the variants run (` sipsic ` , ` mupmuc ` , ` sipmuc ` ,
54+ ` mupsic ` ); without any positional arg, all four bounded lockfreequeues
55+ variants run at the 1p1c smoke shape. Emitted slugs:
56+ ` lockfreequeues_sipsic/spsc/1p1c ` ,
57+ ` lockfreequeues_sipmuc/mpmc/1p1c ` ,
58+ ` lockfreequeues_mupsic/mpsc/1p1c ` ,
59+ ` lockfreequeues_mupmuc/mpmc/1p1c ` . Each carries
60+ ` latency_p50_ns ` / ` latency_p95_ns ` / ` latency_p99_ns ` measures
61+ (` latency_p999_ns ` / ` latency_max_ns ` deferred to PR 6's threshold-
62+ gating work). The binary is built on top of
63+ ` bench_common.runLatencyHarness ` and uses per-binary intdefines:
64+ ` -d:BenchLatencyRuns=N ` (default 33), ` -d:BenchLatencyMessageCount=N `
65+ (default 100_000), ` -d:BenchLatencyWarmupRuns=N ` (default 3).
66+ - New ` bench-latency ` job in ` .github/workflows/bench.yml ` sibling to
67+ ` bench-throughput ` . Both jobs upload per-binary BMF artifacts
68+ (` bench-throughput-bmf ` / ` bench-latency-bmf ` ) consumed by a new
69+ ` bench-upload ` job that downloads via ` actions/download-artifact@v4 `
70+ pattern ` bench-*-bmf ` , runs ` merge_bmf.py ` to union the fragments,
71+ and performs the single ` bencher run ` upload that co-locates latency
72+ + throughput measures on shared per-slug histories. (Multiple
73+ ` bencher run ` invocations create separate Bencher Reports and would
74+ NOT co-locate measures — see merge rationale in design 1.)
5175
5276### Changed
5377
@@ -72,6 +96,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7296- ` benchmarks/README.md ` rewritten to document the new flow
7397 (bench_common module, adapter convention, ` --bmf-out ` flag,
7498 merge_bmf.py, expected slug set).
99+ - ` benchmarks/nim/adapter.nim ` now re-exports ` PushResult ` / ` PopResult `
100+ from ` bench_common ` instead of defining its own copies, unifying the
101+ two parallel type definitions introduced by PR 0 Task 0.1. Both
102+ adapter packs (legacy ` lockfreequeues_sipsic ` / ` lockfreequeues_mupmuc `
103+ / ` channels ` and the newer ` lockfreequeues_sipmuc ` / ` mupsic ` /
104+ ` unbounded_* ` ) now flow through the same ` runLatencyHarness ` and
105+ ` runThroughputHarness ` without per-call-site type conversion. No
106+ external API change: legacy callers that imported ` ./adapter ` for
107+ ` PushResult ` / ` PopResult ` continue to compile (PR 1).
75108
76109### Removed
77110
0 commit comments