OXYGENHUB

Backlog 3: M0 and M1 done, progress on M4, S2 and S3 7757367bedcc

refs #35
Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-29 23:06 UTC
Signature
✔ signed by Andy McCall
Hash
7757367bedcce67d0a6975d8ccbc58db3232141f60a680ffc50b24e0a2794add
Depends on
1681323d1dff 33e77a5526fa
Depended on by
f59376ea413b
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
4 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified docs/backlog-overnight-3.md +21 −2
…
85 unchanged lines
86 86
87 87
## Memory
88 88
89 -
- [ ] M0 **Tools to see memory.** Add a counting global allocator behind
89 +
- [x] M0 **Tools to see memory.** Add a counting global allocator behind
90 90
  a cargo feature (peak bytes and allocation count per `OXY_TIMING`
91 91
  phase), so a profile names the structure that holds the memory. Then
92 92
  profile a clean `status` of the Linux repository, killed at 14 GB
93 93
  (oxygen#35), and the first commit (9.9 GB). Write down which
94 94
  structures hold what before changing anything.
95 -
- [ ] M1 **Status without every graph** (oxygen#35). A clean `status`
95 +
- [x] M1 **Status without every graph** (oxygen#35). A clean `status`
96 96
  must not build every file graph. Unchanged files are skipped by the
97 97
  manifest (spec §12.4), and the first status after a commit must not
98 98
  replay the whole change. Options: the commit writes a checkpoint;
…
65 unchanged lines
164 164
  - **C3** (6b582c4c, closes #38): a parent's checkout moves a subrepo's bookmark only forward, and the pin is read from the nested working copy. `--carry` leaves a subrepo whose pin is carried work as it is.
165 165
  - **C4** (5dfea7b7, closes #29): not a sync bug. rstar-api's operation log shows each such pull ran on a feature bookmark, while main, which the fetch had just updated, was the one behind. pull now names the bookmark it pulled and the others left behind.
166 166
  - **For Andy:** metalgear's working copy is sound, on develop and clean. `logo-25` holds just the logo change and its dependencies; delete it if it is not wanted.
167 +
- 2026-09-30 **M0 and M1 done; M4, S2 and S3 part way** (oxygen#35 and oxygen#39). The tests and clippy pass after each step. Each step was measured on the Linux tip and is recorded in docs/benchmarks.md.
168 +
  - **M0** (f11e81a1): a counting allocator behind the `alloc-stats` feature; with `OXY_TIMINGS` it reports memory per phase.
169 +
  - **M1**, with these steps:
170 +
    - history-only loads read no text (22b70898), then read only a change's skeleton (39c6adea);
171 +
    - graph keys are written at commit (22b70898);
172 +
    - a clean status is answered from the manifest (b4fefa1e) with a parallel walk (e19aa6c5).
173 +
    - Clean status: killed at 14 GB before, now 0.44 s and 123 MB (Git: 0.22 s).
174 +
  - **History-only loads where no graph is needed** (26f81555): bookmark, merge, pull, tags, bisect, doctor and most history rewrites.
175 +
  - **Checkout**: a batch at a time (921fa890), without a snapshot when clean (d1b480f0), and against the manifest without the base state (2b7ce2c6).
176 +
    - One-file switch: killed before, now 2.1 s and 455 MB (Git: 0.2 s).
177 +
    - Local clone: killed before, now 110 s and 8 GB (Git: 9.6 s).
178 +
  - **log, blame and fsck** (34ea4ace), with metadata-only change reads:
179 +
    - log -n 100: 28 s and 4.7 GB before, now 2.0 s;
180 +
    - blame: killed before, now 1.1 s;
181 +
    - fsck: killed before, now 123 s and 4.5 GB.
182 +
  - **Snapshot**: a parallel walk with stats carried into the manifest (a578fa19), and a cached tree view (de3f07f8). Status with one file changed: 4.1 s before, now 2.3 s (Git: 0.23 s).
183 +
  - **Still far from Git**: one-file and 1 000-file status, diff and commit (2 to 5 s); switch (2 s); log (2 s); clone (110 s, 8 GB); first commit (56 s, 10 GB); fsck (4.5 GB).
184 +
    - The common cost is loading the first change's history (0.5 s) and building the tree view (0.4 s).
185 +
    - Next: a persistent per-state cache (tree view, graph keys and change set), Git's index in effect, then compact graphs (M2) and a streaming commit (M3).
167 186