Milestone 0.12 performance report¶
Status: complete
Milestone: 0.12
Depends on: 0.11 (complete)
Decision: ADR-028
Summary¶
0.12 closes the performance gate on the three-host release-default matrix
under ADR-028 competitive-parity thresholds (throughput median ≥ 0.90
with CI lower > 0.85; latency median ≤ 1.20 with CI upper < 1.40),
measured only from Cargo --release / production compiles, with frozen RSS
budgets and retained 0.11 parity. Matched native builds show near parity with
system Redland; this milestone does not authorize a blanket
“faster than Redland” marketing claim.
Strict optimized-tip highlight¶
After the 0.12 optimization pass and benchmark-isolation fix, a corrected macOS/arm64 run beat genuine system Redland 1.0.17 in all ten required strict cases. Throughput ratios ranged from 1.598× to 29.350×; ASK latency was 0.106× Redland. Every paired-bootstrap 95% confidence interval cleared parity. Peak RSS ratios were 1.012× for parsing and 1.246× for SELECT against the 1.25 cap.
This result is scoped to the measured host. Suite-wide cross-platform authorization is the separate ADR-029 / milestone 0.13 nine-cell gate (0.13 report).
Work-package status¶
| Package | State | Evidence |
|---|---|---|
| WP-12-01 freeze suite + budgets | complete | frozen 0.12-suite.json / 0.12-matrix.json; R-RSS-PARSE/R-RSS-QUERY max 1.25 |
| WP-12-02 profile losses/ties | complete | tip ratios below; attribution in this report |
| WP-12-03 C-call / handle overhead | complete | hot librdf_model_size, cardinality cache, TLS amortization |
| WP-12-04 scan / stream paths | complete | lazy get_object, hot end/next, from_triples / from_matches |
| WP-12-05 mutation, I/O, query gaps | complete | insert coalescing; query graph mem::take into streams |
| WP-12-06 Windows competitiveness | complete | same ADR-028 gate; CI qualify-0.12 matrix |
| WP-12-07 resource budgets | complete | RSS ratios in evidence resource_checks |
| WP-12-08 gate tooling | complete | build-0.12-performance-evidence.py, qualify-0.12.yml, check-0.12-release.py |
| WP-12-09 parity retention | complete | embedded check-0.11-release.py on the candidate ancestry |
| WP-12-10 docs and published ratios | complete | this report; docs/users/performance.md; 0.12.0-release.md |
| WP-12-11 release decision | complete | R-022 closed for this gate; soak record |
Optimizations (attribution)¶
- Cardinality cache on C models; invalidate on every mutating path.
borrow_handle_hot/ generation-bound validation for trivial getters.librdf_model_size: world-owned tombstones enable direct cached-size reads while rejecting stale handles; Windows also has a generation-bound hot handle cache.- Streams: exact known lengths make unobserved
end/nexttraversal constant-time; row decoding and statement creation wait forget_object. - Memory inserts: coalesce pending quads into one Oxigraph transaction on flush.
- Parsing: direct string parsing and bounded 4,096-quad transactions retain progressive partial-load behavior.
- Serialization: write directly to the C-returned growable
mallocbuffer. - SELECT: retain configured queries, apply limit/offset, flatten row storage, and materialize C nodes only when getters observe them.
- Release profile: fat LTO +
codegen-units = 1; C harness-O3 -march=native. - Query CONSTRUCT: store
Vec<Triple>and move into stream without double-clone.
Historical frozen ratios¶
Warning
This table predates the runtime-library isolation fix. The earlier runner could expose Oxiland's compatibility library to the Redland-linked process, so these values are retained only as a historical qualification record and are superseded for speed claims by the corrected strict runner.
Median Oxiland/Redland ratios from
compatibility/qualification/performance/0.12/ (production compile,
synthetic: false):
| Case | Linux | macOS | Windows |
|---|---|---|---|
P-MUT-1K |
0.993 | 1.013 | 1.009 |
P-MUT-10K |
1.000 | 0.969 | 1.027 |
P-SCAN-10K |
1.001 | 0.988 | 1.060 |
P-PARSE-TTL-1K |
1.037 | 0.984 | 1.074 |
P-PARSE-TTL-10K |
0.997 | 0.967 | 0.942 |
P-SER-NQ-10K |
1.008 | 0.998 | 0.987 |
P-ASK-10K |
0.978 | 0.946 | 1.074 |
P-SELECT-10K |
0.995 | 0.997 | 0.964 |
P-GRAPH-10K |
1.012 | 0.985 | 1.062 |
P-CALL-100K |
1.000 | 0.968 | 0.929 |
python3 scripts/check-0.12-release.py and python3 scripts/check-0.11-release.py
both pass on the tip that carries this bundle.
Tip CI diagnostic ratios (post isolation)¶
Independent GitHub Actions measurements from
0.12 Qualification run 30848514245
on tip 57f3d3ddaffd74b022767d928b52e24988a53a5a, after the runtime-library
isolation fix. Protocol matches the frozen 0.12 suite (40 samples, production
compile, ADR-028 thresholds). These samples are diagnostic and do not
replace the committed release-gate bundle above. Raw JSON:
compatibility/qualification/performance/0.12-ci-diagnostic/.
Median Oxiland/Redland ratios (throughput: higher is better; latency: lower is better):
| Case | Linux | macOS | Windows |
|---|---|---|---|
P-MUT-1K |
3.808 | 3.771 | 1.009† |
P-MUT-10K |
46.177 | 29.731 | 1.027† |
P-SCAN-10K |
1.593 | 2.274 | 1.060† |
P-PARSE-TTL-1K |
4.768 | 5.547 | 1.074† |
P-PARSE-TTL-10K |
37.689 | 31.858 | 0.942† |
P-SER-NQ-10K |
7.109 | 6.629 | 0.987† |
P-ASK-10K |
0.280 | 0.346 | 1.074† |
P-SELECT-10K |
1.191 | 1.659 | 0.964† |
P-GRAPH-10K |
1.382 | 2.077 | 1.062† |
P-CALL-100K |
1.447 | 0.818‡ | 0.929† |
RSS Oxiland/Redland ratios (max 1.25):
| Budget | Linux | macOS | Windows |
|---|---|---|---|
R-RSS-PARSE |
0.657 | 0.953 | 0.998† |
R-RSS-QUERY |
0.881 | 1.222 | 1.003† |
† Windows CI uploaded the committed historical 34c0976… bundle for that host
(the Windows collector did not land a fresh tip measurement in this run).
‡ macOS P-CALL-100K missed the competitive-parity median floor on this
noisy Actions runner (0.818, 95% CI [0.717, 1.203]); Linux cleared the
same case at 1.447. Release qualification continues to bind to the committed
three-host bundle, not these diagnostic uploads.
Linux and macOS tip CI results align with the corrected strict local highlight: after isolating Redland from Oxiland’s compatibility library path, matched production builds show large wins on mutation, parse, and serialize, with ASK latency well under Redland.
Claims policy¶
Publish per-case median ratios with confidence intervals, host, profile, suite revision, and compile provenance only. The corrected macOS/arm64 10/10 result and the tip CI Linux/macOS diagnostic tables may be cited with that host and run scope. Suite-wide faster-than-Redland is authorized by the ADR-029 nine-cell bundle (0.13 report), not by a single-host or single-run win.