Skip to content

Performance

Claims policy

Publish only results that name the suite, host (or CI matrix), build profile, and statistical method. Do not treat a single-host table as a substitute for the suite-wide claim below.

Claim class What it means Where it lives
Competitive parity (ADR-028) Oxiland stays within about 10% of Redland on every required case 0.12 release gate / three-host bundle
Suite-wide faster-than-Redland (ADR-029) Linux, macOS, and Windows each pass three independent strict runs Tip evidence under compatibility/qualification/performance/0.13/ + 0.13 report
Host-scoped highlight Corrected local run after library-path isolation Highlight table below (macOS/arm64 only)

Always measure release builds. Debug/dev compiles are not comparable to Redland production libraries.

Suite-wide faster-than-Redland (authorized)

Milestone 0.13 closed ADR-029: Linux x86-64, macOS Apple Silicon, and Windows x86-64 each passed three independent corrected-runner cells against compatibility/performance/0.13-suite.json (throughput median ≥ 1.05 with CI lower > 1.0; latency median ≤ 0.95 with CI upper < 1.0; 100 paired samples; RSS ≤ 1.25×). Qualifying CI: run 30973969324 on a50ee5b25eb9daa56b0cf1d155856e1c312b35fb. python3 scripts/check-0.13-release.py is green on the committed bundle.

Worst-of-three run medians per host (minimum throughput ratio; maximum ASK latency ratio):

Case Linux macOS Windows
Insert 1K 3.273× 2.915× 2.809×
Insert 10K 40.152× 25.298× 32.678×
Scan 10K 1.629× 2.248× 2.018×
Parse Turtle 1K 3.692× 5.148× 3.074×
Parse Turtle 10K 35.636× 28.928× 31.645×
Serialize N-Quads 10K 7.096× 6.348× 9.738×
ASK latency 0.314× 0.286× 0.216×
SELECT 10K 1.564× 2.518× 2.039×
CONSTRUCT 10K 2.715× 5.462× 4.009×
100K model-size calls 1.332× 1.228× 1.104×

Full methodology and reproduce steps: 0.13 report.

python3 scripts/check-0.13-release.py

Highlight: every strict case won locally

Separately, an optimized tip beat genuine system Redland 1.0.17 in all ten required cases on macOS/arm64. The corrected driver ran 100 per-sample AB/BA pairs per case, calibrated each sample to at least 10 ms, and evaluated paired-bootstrap 95% confidence intervals. Higher is better for throughput; lower is better for latency. This remains a host-scoped result under the claims policy above (the suite-wide claim is the three-host table).

Case Oxiland / Redland Paired 95% CI
Insert 1K 3.312× 3.289–3.356
Insert 10K 27.193× 26.667–27.385
Scan 10K 2.077× 2.064–2.091
Parse Turtle 1K 5.086× 5.050–5.115
Parse Turtle 10K 29.350× 29.090–29.670
Serialize N-Quads 10K 7.158× 7.094–7.198
ASK latency 0.106× 0.104–0.109
SELECT 10K 1.738× 1.700–1.773
CONSTRUCT 10K 2.102× 2.078–2.153
100K model-size calls 1.598× 1.595–1.602

Median peak RSS was 1.012× Redland for parsing and 1.246× for SELECT, both inside the frozen 1.25 budget.

Release qualification baseline

Milestone 0.12 freezes a competitive-parity gate (ADR-028): on matched production builds, Oxiland must stay within about 10% of Redland on every required case (throughput median ≥ 0.90, latency ≤ 1.20, with bootstrap CI bounds). Tip 0.12.0 closed that gate on the committed three-host bundle. Milestone 0.13 / tip 0.13.0 then restored and closed the stricter suite-wide margin (ADR-029) on the committed nine-cell evidence.

Tip CI diagnostic medians (historical 0.12)

From 0.12 Qualification run 30848514245 (post library-path isolation). Full table and footnotes: 0.12 report.

Case Linux macOS
Insert 1K 3.808× 3.771×
Insert 10K 46.177× 29.731×
Parse Turtle 10K 37.689× 31.858×
Serialize N-Quads 10K 7.109× 6.629×
ASK latency 0.280× 0.346×
100K model-size calls 1.447× 0.818×

Historical 0.12 evidence

The committed 0.12 release-gate bundle predates the runtime-library isolation fix and must not be used for a faster-than-Redland claim. Prefer the suite-wide 0.13 table above (and the host-scoped highlight) for speed claims. The 0.12 tip CI Linux/macOS diagnostics come from the corrected runner but are not the ADR-029 nine-cell bundle.

Practical defaults

  • Prefer streaming parse and serialize APIs for large files instead of loading entire documents as strings when the API offers a stream or path path.
  • Consume SPARQL and find iterators incrementally; avoid collecting unbounded results into lists.
  • Persistent (Fjall) models keep a full in-memory Oxigraph working set for query—plan RAM for the dataset size in addition to on-disk footprint.
  • Apply SPARQL LIMIT / application budgets before exposing query to untrusted or latency-sensitive callers.
  • Parse and bulk-load iterators do not expose wall-clock cancellation; stop consuming them or isolate the work at the process/thread boundary.

Comparison status

  • Protocol and thresholds: VERIFICATION.md — 0.12 / 0.13 performance, ADR-028, and ADR-029.
  • Results: 0.13 report (suite-wide); 0.12 report (competitive parity); strict suite in compatibility/performance/0.13-suite.json; CI gate in .github/workflows/qualify-0.13.yml.
  • Always measure release builds. Use cargo build -p oxiland-capi --release --locked (and matching --release Rust examples/benches). Debug/dev compiles are not comparable to Redland production libraries and are rejected by the performance gates.