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.md Original SHA-256: d11279ff5c8b6253a911262ba20eb1508889a69618459c7ce3beede2015e4b74 Stated 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.