OXYGENHUB

Benchmarks after O10b; backlog: O10b done, O10c added 0bb9413f0118

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-28 07:44 UTC
Signature
✔ signed by Andy McCall
Hash
0bb9413f0118b6ad6276634b205455db9ea7900a73b2497eb854883ca0bb667a
Depends on
1d360c91a289 75036530b621 978470f76e66 b8a0399319fc
Depended on by
0bdc3f91a39f 57f8f0b3a4d0
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
2 atoms, 0 tree operations, 2 files

Browse the tree at this change

modified docs/backlog-overnight-2.md +1 −0
…
63 unchanged lines
64 64
- 2026-09-28 V2 done: hub API `GET /notifications`, `POST /notifications/{id}/read`, `POST /notifications/read` (scope user:read; deployed). oxygenhub-vscode 0.3.0: status-bar bell with unread count across hubs, new-notification messages, Open Inbox quick pick that marks read and opens proposals/issues in the editor. Installed in both profiles (Reload Window). Tests: hub api test extended; extension pass 7 fail 0.
65 65
- 2026-09-28 O10a done: `State::maximal` was quadratic in heads (4 500 heads in the benchmark); now one walk, with a property test against the old definition. Commit reuses the snapshot's base. At 10 000 files / 5 000 changes: commit 3.8 s to 0.86 s, 10-file commit 9.1 s to 0.86 s, status 3.0 s to 0.80 s, blame 2.9 s to 0.81 s, memory 1.4 to 1.1 GiB; benchmark run 5 h 14 min to 1 h 12 min. Hub redeployed with it. O10b (manifest fast path, lazy base) remains for the per-file cost.
66 66
- 2026-09-28 V3 done: oxygenhub-vscode 0.4.0: `#` and `@` completion in the Oxygen commit box and comment editors, hover on `#N`; repository from the SCM root. Parsing tested in Node (pass 10, fail 0). Installed in both profiles.
67 +
- 2026-09-28 O10b done: rayon for materialize, checkpoint file graphs and working-copy reads. At 10 000 files: clean status about 800 to 460-580 ms, commit 861 to 550-605 ms. Remaining cost is loading the whole base (O10c, needs a checkpoint format change in the spec, so left for Andy to agree). Hub redeployed.
modified docs/benchmarks.md +25 −0
…
96 unchanged lines
97 97
grows with the number of files: at 10 000 files a snapshot spends about
98 98
320 ms loading the base state, 190 ms materializing it, 130 ms walking the
99 99
working copy and 40 ms building the change. That is O10b.
100 +
101 +
## 2026-09-28: after O10b
102 +
103 +
Rendering the base state, building file graphs from a checkpoint and
104 +
reading the working copy now run on all cores. Measured at 10 000 files
105 +
with 60 and 300 changes (commit time no longer depends on the length of
106 +
history, so the full 5 000 was not rerun):
107 +
108 +
| Phase of one snapshot, 10 000 files | After O10a | After O10b |
109 +
|---|---:|---:|
110 +
| load the base state | 320 ms | 180–280 ms |
111 +
| materialize the base state | 190 ms | 75 ms |
112 +
| walk and read the working copy | 130 ms | 80 ms |
113 +
| build the working-copy change | 40 ms | 40 ms |
114 +
| write the manifest | – | 46 ms |
115 +
116 +
| Operation, 10 000 files | After O10a | After O10b | Threshold |
117 +
|---|---:|---:|---:|
118 +
| status: clean working copy | 803 ms | 464–581 ms | 2 000 ms |
119 +
| commit: one file (mean) | 861 ms | 550–605 ms | 250 ms |
120 +
| commit: 10 files | 861 ms | 583–635 ms | 500 ms |
121 +
122 +
Loading the whole base state is now the largest cost. O10c removes it: a
123 +
snapshot should load and render only the files whose stat changed, which
124 +
needs checkpoints that can be read per file.