Performance: burn down the libxml2 gap #6

Open
opened 2026-07-05 03:44:53 +00:00 by Mihaela · 1 comment
Mihaela commented 2026-07-05 03:44:53 +00:00 (Migrated from codeberg.org)

Status (2026-07-05)

Active. Recreated after the tracker loss; the original per-task breakdown is gone, and this epic carries the workstream.

bash scripts/benchmark.sh builds PureXML and a C libxml2 driver over the same generated corpus with internal timing and a shared XPath cross-check, so every benchmark run doubles as a correctness check. docs/benchmarks.md holds the live table (size series plus NASA ADC and SwissProt real corpora) and the findings only large corpora could surface, such as the quadratic document-order sort caught and fixed at 42 MB.

The table updates as optimization passes land, never silently. Work items get filed as task issues against this epic as they are picked up.

## Status (2026-07-05) Active. Recreated after the tracker loss; the original per-task breakdown is gone, and this epic carries the workstream. `bash scripts/benchmark.sh` builds PureXML and a C libxml2 driver over the same generated corpus with internal timing and a shared XPath cross-check, so every benchmark run doubles as a correctness check. `docs/benchmarks.md` holds the live table (size series plus NASA ADC and SwissProt real corpora) and the findings only large corpora could surface, such as the quadratic document-order sort caught and fixed at 42 MB. The table updates as optimization passes land, never silently. Work items get filed as task issues against this epic as they are picked up.
Mihaela commented 2026-07-12 11:14:37 +00:00 (Migrated from codeberg.org)

Passes 25-28 landed (docs/benchmarks.md): parse ~6.59x -> ~4.5-4.75x versus libxml2 on the 20000-item corpus, each pass verified against the full local suite and the full W3C XSTS run.

Two structural findings from the same rounds, so the epic reflects where the remaining gap actually lives:

  • #8 files the largest single non-scanning cost (TreeNode weak-parent side tables, ~9% of parse) as a design decision rather than an optimization pass.
  • Two candidates measured NEUTRAL under interleaved A/B and were reverted rather than landed (children-capacity reservation; byte-path close-quote consume). Both recorded in docs/benchmarks.md so they are not redone. The cheap single-locus scanner wins appear exhausted; further parse progress likely needs either #8's decision or a deeper scanning-architecture change.
Passes 25-28 landed (`docs/benchmarks.md`): parse ~6.59x -> ~4.5-4.75x versus libxml2 on the 20000-item corpus, each pass verified against the full local suite and the full W3C XSTS run. Two structural findings from the same rounds, so the epic reflects where the remaining gap actually lives: - #8 files the largest single non-scanning cost (TreeNode weak-parent side tables, ~9% of parse) as a design decision rather than an optimization pass. - Two candidates measured NEUTRAL under interleaved A/B and were reverted rather than landed (children-capacity reservation; byte-path close-quote consume). Both recorded in `docs/benchmarks.md` so they are not redone. The cheap single-locus scanner wins appear exhausted; further parse progress likely needs either #8's decision or a deeper scanning-architecture change.
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: NodetteHQ/PureXML#6
No description provided.