OXYGENHUB

The full Linux run in the benchmarks 75b6c8665219

refs #35
Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-30 05:36 UTC
Signature
✔ signed by Andy McCall
Hash
75b6c86652194ec742e110d942105569180a3c09bc69b8f0cc3840e656ba9df1
Depends on
1681323d1dff 1d360c91a289 33e77a5526fa d77e1702d770 f6451fbbae3f
Depended on by
60622d23b9e4
In bookmarks
agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
In tags
v0.1.0 v0.10.0 v0.11.0 v0.2.0 v0.3.0 v0.3.1 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
Edits
3 atoms, 0 tree operations, 2 files

Browse the tree at this change

modified docs/backlog-overnight-3.md +1 −1
…
224 unchanged lines
225 225
    - list a commit's changes with `git diff-tree` against its first parent rather than `ls-tree`;
226 226
    - keep the tree view up to date as changes apply, rather than recomputing it;
227 227
    - render only the paths a commit touches.
228 -
228 +
- 2026-09-30 **Full Linux run** (06:24): table in `docs/benchmarks.md`. oxy matches Git on the first commit (38.5 s against 38.8 s) and beats it on gc (39.7 s against 102.8 s); the store is 324 MB against 295 MB. Everyday commands are still 5 to 15 times slower: most of each is loading the base's history and tree view. A one-file commit no longer reloads the new base for its manifest keys: 3.1 s (from 4.7 s). oxygen#41 (a base index) is proposed and waits for Andy.
modified docs/benchmarks.md +37 −0
…
508 unchanged lines
509 509
references pass 1.7 s. Phases are timed (`OXY_TIMINGS`): objects 5.1 s,
510 510
references 1.7 s, states and checkpoints 10.4 s.
511 511
512 +
513 +
### The full run (2026-09-30 06:24, main-0ba9b2e4)
514 +
515 +
`~/bench/linux-bench.sh` on Earth, at load average 3.8 to 4.5 (flow jobs
516 +
were running). Times are wall clock; memory is peak resident size.
517 +
518 +
| Operation | oxy | Git |
519 +
|---|---:|---:|
520 +
| init and commit the tip | 38.50 s, 4.4 GB | 38.77 s, 42 MB |
521 +
| status, clean (three runs) | 0.68 to 0.76 s, 123 MB | 0.35 to 0.76 s, 31 MB |
522 +
| status, one file | 3.32 s, 641 MB | 0.59 s |
523 +
| diff, one file | 2.93 s | 0.24 s |
524 +
| commit, one file | 4.74 s, 752 MB | 0.45 s |
525 +
| status, 1 000 files | 3.88 s, 811 MB | 0.41 s |
526 +
| diff, 1 000 files | 2.83 s | 0.95 s |
527 +
| commit, 1 000 files | 4.85 s, 922 MB | 0.57 s |
528 +
| log -n 100 | 1.39 s, 291 MB | 0.01 s |
529 +
| blame MAINTAINERS | 1.18 s, 335 MB | 0.09 s |
530 +
| checkout the first state (run by hand) | 2.84 s | 0.42 s |
531 +
| checkout back | 2.22 to 2.72 s, 491 MB | 0.47 s |
532 +
| fsck | 22.10 s, 1.07 GB | 13.09 s |
533 +
| gc | 39.66 s, 2.8 GB | 102.79 s |
534 +
| store before gc | 414 MB | 648 MB |
535 +
| store after gc | 324 MB | 295 MB |
536 +
537 +
The script's own oxy checkout of the first state failed; its hash lacked
538 +
the `#`, and the script is fixed. The time in the table is from running
539 +
it by hand.
540 +
541 +
Commit, one file: its graph keys now come from the state the commit
542 +
extended rather than a reload of the new base (main-eff93613), which
543 +
takes it to 3.05 to 3.27 s; the status after it takes 0.43 s.
544 +
545 +
What is left for the everyday commands is mostly loading the base's
546 +
history and its tree view (about 1 s of each) and rendering what
547 +
changed. oxygen#41 proposes a base index that would make those reads
548 +
proportional to what changed.