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. |