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 |