Experiment benchmarks coupled labs capacity - kmosoti/FabricO11y GitHub Wiki
Historical repository record migrated on 2026-10-10. Original repository path:
docs/experiments/benchmarks/coupled-labs-capacity.mdOriginal SHA-256:d11279ff5c8b6253a911262ba20eb1508889a69618459c7ce3beede2015e4b74Stated outcomes, measured revisions, failures and limits remain historical. Local raw evidence is private and is not uploaded. Relative links and the data-drive prefix were normalized.
Coupled labs: capacity and lifecycle packet
Current disposition: see completion preparation and executed run. The preparation status below is historical.
Status: prepared; experiments not run. Accountable: capacity PI, coordinator
until dispatch. Common plan governs admission. Capacity's
historical evidence allowance is exceeded; measurement admission is pending.
Own this packet and future coupled-capacity-* diagnostics. No native workloads
or shared source edits without coordinator dispatch.
C4 — explain the allocation/CPU disconnect
H1: Parquet decoding, attribute validation or other unchanged work dominates the borrowed-row path, explaining lower allocations without reliable CPU savings. H0: measured stages cannot explain the timing result, or noise/observer effects dominate. This is attribution, not a predetermined optimization victory.
Start from borrowed-row findings,
rows.rs,
query.rs, and the existing
completion_query_probe.rs (local checkout reference crates/fabric-server/examples/completion_query_probe.rs; not present at origin/main).
Baseline owns inspected rows; candidate is the existing opt-in borrowed view.
Tail is an already-borrowed negative control, not a new candidate.
Prepare seed-42 fixtures at 8,192 and 65,536 logs: empty attributes versus eight 128-byte string attributes per row, fixed 1,024-byte body. Declare encoded-byte sizes rather than pretending matched row counts have matched bytes. First screen small selective (one hit/128 rows) and broad queries, Walk primary and Scan reference; larger fixture conditional on time/evidence projection. Limit 50, full pagination. Add a small mixed-signal semantic fixture to check unchanged metrics/spans, not claim a log optimization improves those signals.
Attribute decompression/page decode, scalar/key inspection, attribute parse and validation, predicate, owned winner construction, heap maintenance and output. Record CPU and wall boundaries, row counts and requested/live allocation bytes. Capture observer-off/on controls separately; invalidate stage conclusions if instrumentation changes behavior or costs enough to obscure the measured effect. Stage ledgers must reconcile with total within a preregistered tolerance; retain unattributed time. Do not equate summed stage wall time with process CPU.
Required controls: malformed attributes in a predicate-rejected row still get the original error; all required columns/type checks survive; altered winners, order and pagination are rejected. Do not skip validation to manufacture savings. Deliver an attribution ledger and at most one next mechanism hypothesis. A plain confirmed speed claim requires the common three-pair rule on fresh trials.
C5 — workers × run size under shared demand
Joint reviewer: operations PI; deferred until O6/O7 and resource admission. H1: at least one bounded worker/run configuration preserves exactness and offers a better feasible resource/latency point under concurrent ingestion/query. H0: gains vanish under contention or violate a hard bound.
Inspect sealer.rs and
bounded.rs (local checkout reference crates/fabric-server/src/segment/bounded.rs; not present at origin/main).
Proposed discovery grid: workers {1,2} × run byte caps {8,16 MiB}, existing defaults
as explicitly measured reference; reserve 32 MiB at the selected worker count as
a held-out prediction check. Run-size override must be an experiment-only knob
with real enforced byte accounting before admission, not an assumed current CLI.
Start one worker/run cell without queries, then matched fixed Walk demand to expose coupling. Select dev or small profile only after a cheap capacity preflight can supply stable offered demand; never reinterpret a throttled generator as a server limit. Use existing dev 1-node 10/30 and small 20-node 1,000/3,000 aggregate logs/s as candidate offers, not sustainable-rate promises. Freeze phase duration, mixed-signal cadence, history and query schedule before running.
Primary output is a measured feasible/Pareto set, not a fitted universal optimum. Measure simultaneous service RSS/cgroup memory, builder heap, backlog slope/drain, CPU per accepted byte, ACK/query latency, refusal/retry and spill/read/write bytes. Hold encoding/compression and semantic output fixed. Changed row-group layout must respect O7's explicitly resolved criterion. Three fitted sizes cannot also serve as independent validation of a three-parameter curve.