Experiment benchmarks cross system sweep findings - kmosoti/FabricO11y GitHub Wiki
Historical report imported 2026-10-10 from
docs/experiments/benchmarks/cross-system-sweep-findings.md. Original SHA-256:c22e3e1008201aebd8dd8f50d154b74b9e9b87b8dd85bed2379fcf0b4a61cf2d. Measurements and outcomes retain their stated revisions. Links and local environment labels are normalized;$FABRIC_DATAis the mounted experiment drive. See evidence policy.
Matched cross-system workload findings
This round repairs source retrieval and turns selected upstream mechanisms into
bounded, comparable experiments. The registered protocol (local checkout reference docs/experiments/benchmarks/cross-system-sweep-protocol.md; not present at origin/main)
and evidence allocation supplement (local checkout reference docs/experiments/benchmarks/cross-system-evidence-allocation-supplement.md; not present at origin/main)
govern the work. All native workloads were serialized on the local data drive
through the verified resource launcher. These results support research choices;
they do not select a storage migration, change a production default, or qualify
a deployment.
Retrieval and provenance
All 24 additional repositories now have complete regular-file inventories;
Turso's earlier source record remains separate. The three repaired downloads
are ClickHouse at 47907285810e618994aa703c31beb0edfc5d2271, Vector at
47e05c4749b6b1af460af521279dc4681a912bb3, and FoundationDB at
daae46ce69b1fdddefdbb985e03e5a12576b3077. The full compressed archives contain
361,264,396, 18,988,229 and 13,497,325 bytes respectively. ClickHouse's successful
inventory covers 82,049 regular members and 900,281,827 decoded bytes.
The initial ClickHouse retry completed its download but exceeded the compressed inventory allowance. Its failed receipt and exact archive remain; the registered inventory retry authenticated and reused that archive without downloading or duplicating it. Earlier 404s and the earlier archive-size failure remain historical failures. Independent source checking (local evidence omitted from stage) exited zero, checking archive digests, complete member inventories and selected source binding, including a self-consistent excerpt-substitution rejection. An inventory establishes source custody, not a whole-engine audit. The source synthesis links the actual implementation dissections and their limits.
Comparable workloads and outcomes
| Lab | Workload and measurement | Observed implication |
|---|---|---|
| Storage | 72 native cells: 8/16/32 MiB sort caps, 16/64 MiB inputs, three shapes, two seeds, reference/bounded builders | 8 MiB reduced build peak heap 20.46–26.75% versus 16 MiB and passed all six initial screens. 32 MiB passed none. |
| Storage confirmation | 24 more native cells on two new seeds, using the frozen 8/16 MiB binaries | All six screens confirmed: heap falls 20.45–26.74%; throughput ratios are 0.941–1.078, CPU 0.958–1.042, and whole-worker RSS 0.790–0.966 of the 16 MiB baseline. |
| Memory attribution | Eight native cells: four plain/observed pairs at caps 8/16 and inputs 16/64 MiB | Peak growth occurs during ingestion's batch-writing intervals; additional co-resident live state explains nearly all the shift. Exact allocation ownership remains unresolved. |
| Query | 1,536 timed exact answers across Arrow full/pruned reads and DuckDB Parquet/persisted tables | Selective, clustered small groups reward pruning; randomly mixed large groups can erase the saving and make index construction hard to repay. |
| Compressed representation | 576 timed exact answers across Arrow and Vortex full/predicate reads | Selective wide-body predicates reduced conversion/filter work, but full reads and retained file size were adverse. |
| RowSet | 48 native Vec/dense/Roaring cells, including construction, AND/OR, Top64, serialization and conversion | Density, physical locality and requested operation matter independently; no representation wins every operation. |
| Held-density locality | 48 more native RowSet cells: identical logical cardinality and overlap, contiguous/shuffled physical IDs, two new seeds | Roaring's memory and combination costs change sharply with placement; dense bitmap costs remain comparatively stable. |
| Prepared scan reuse | 384 more exact timed Vortex answers on the retained files | Preparation is cheap, but execution savings are modest or inconsistent; mixed wide-body results reverse between repetitions. |
| Operations | 54 Store/sealer cells plus 12 fresh adjacent-cadence cells | Grouped sync cost and ACK delay trade against each other; frequent diagnostics also perturb the system being observed. |
The detailed records are storage, query and Vortex, RowSet, and operations. Follow-up confirmation, prepared-scan reuse and held-density locality results are recorded there separately from the original screen; their outcomes must not retroactively redefine it.
In total, the successful sweeps contain 266 native storage/RowSet/operations cells and 2,496 timed exact query answers. The 66 operations cells accepted all 33,792 offered Batches and passed 528 complete query chains. These counts cover different scopes; they are not independent trials of device failure or capacity. The smaller run cap increases measured build writes by about 0.007–0.025%, so its confirmed benefit is memory, not IO reduction. No default was changed.
The query fixtures use the same deterministic logical rows and an independent Python full-answer oracle, including ordering and limits. They are component comparisons, not native Fabric query-service comparisons. Vortex 0.87.0, DuckDB 1.4.3, PyArrow 22 and Roaring 0.11.5 are pinned in retained manifests. The native storage row ledgers remain differential through existing Rust scanners; the Python physical-filter reconstruction is independent. Operations exercises the real Store and sealer but excludes HTTP/TLS and sustained service capacity.
Counterexamples and repairs
The strongest negative result is mathematical: two memory models frozen before the larger inputs both failed their 5% maximum-error requirement. Constant-per-cap and linear-in-cap predictions underestimated peak by up to about 23%. The separate phase experiment locates the problem in simultaneous live state during ingestion; this is not evidence of an unbounded leak. The next model must account for owners whose lifetimes overlap, rather than equating one sort-run limit with process memory.
The round also exposed defects and blind spots in research tooling:
- Source preservation could receive a successful short copy. The corrected path verifies exact bytes, records the partial target and retains the original without allocating another large failure copy.
- A final evidence census could throw before a failed coordinator receipt was written. Finalization now preserves the primary failure and records the census error. Transient file disappearance during census is handled separately from forbidden symlinks.
- A dependency install introduced cache symlinks into strict owned scratch. The retry uses an uncached copy installation. The rejected tree remains evidence.
- An empty Vortex struct result lacked the expected table conversion path. The adapter now constructs an empty Arrow table from the actual schema and applies the same checked conversion; unsafe literal-to-LIKE mappings have explicit rejection controls and exact fallback.
- Roaring's source archive contains two license aliases. The narrowly registered retry checks their exact names/targets and hashes the regular root licenses; other links remain rejected.
- A new RowSet report reducer rejected the runner's legitimate root directory and serialized inputs. A report-only retry admits exactly that directory and five known files, retains path/link/duplicate controls, and rechecks all outputs. The failed report remains; no native measurements were rerun to replace it.
- Final Clippy rejected constant feature assertions in the two new cadence examples. An explicit feature guard now rejects a tracing-disabled binary before scratch creation. The targeted Clippy recheck exited zero; original measured binaries and exact source snapshots remain unchanged evidence.
Artifact regressions (local evidence omitted from stage) exercise the actual preservation and coordinator helpers with representative injected defects. These are harness and adapter corrections, not newly discovered Fabric durability bugs or proven upstream-engine defects. All original failed receipts remain distinguishable from successful retries.
Research consequences
The research-vector models retain both the promising regimes and the nulls. Priorities are shared staging budgets across signal types, storage-owned pruning and delayed materialization, RowSet choice informed by locality and operation, and latency-aware admission grouping. Prepared scan reuse tests whether fixed planning work is worth optimizing after conversion costs are reduced. Every candidate must pay construction, conversion, maintenance and correctness costs over its useful lifetime.
The finite data does not support multiplying these gains, an automatic controller, an engine-wide performance ranking, or a release-readiness claim. Concurrent service memory, crash/power-loss cuts, long retention, varied machines, real corpus diversity and full Fabric query continuations remain separate tests.
Verification and cleanup
All seventeen fast checks passed in final-fast-02 with exit 0, including the
full workspace/history tests, Clippy, layer/purity checks, independent oracles,
properties, corpus tests and simulation. The first full invocation retains its
Clippy failure; its workspace tests had already passed. The retry used fresh
receipts after correcting the new examples' feature guards.
Final verification uses cargo xtask checks --profile fast with two build jobs
and a fresh receipt directory, followed by the manual documentation profile
through sweep_documentation.py. The latter authenticates the archived Bun
runtime, removes its scratch copy and leaves documentation hooks/CI disabled.
Both commands run through resource_group.py and run_sweep_job.py. Their
commands, exit codes, raw measurements, source identities and cleanup records
remain under the coordinator evidence (local evidence omitted from stage).
The closeout binds the twenty configured fast/documentation receipts to the
actual final jobs, current candidate commit and execution windows, retaining
the dirty-worktree qualification. It distinguishes nested helper receipts from
job receipts and authenticates all three frozen storage binaries before removal.
The sweep evidence root (local evidence omitted from stage) retains successes and failures. Native work was serialized; builds used two jobs, and query/Vortex children had two-CPU affinity. The cgroup CPU quota itself was unlimited. Requested build heap, whole-worker RSS and charged cgroup peaks are reported separately. The resource closeout records aggregate execution time, memory events, swap, evidence allocation and free data-drive space without counting helper elapsed time as a separate native experiment.
The first query and Vortex failures have complete, exactly verified archives.
Vortex's preservation receipt (local evidence omitted from stage)
records 377,802,888 regular bytes and two exact archive readbacks before removing
the relocated original. The empty source-failure tree has a separate
preservation receipt (local evidence omitted from stage).
Historical failed receipts keep their original cleanup flags; later verified
preservation records resolve current ownership instead of rewriting history.
The empty locality-reducer failure tree also required a smaller archive
reservation: the default 192 MiB reservation exceeded remaining query evidence
capacity. Its rejected cleanup receipt is retained. The bounded retry configures
the same archiver's enforced ceiling to 1 MiB, preserving the empty failed-job
trees with the same two exact readbacks and mutation controls before removal.
The small preservation retry (local checkout reference docs/experiments/benchmarks/cross-system-small-preservation-retry.md; not present at origin/main) records
this stricter configuration and preserves the first failed final-check tree too.