OXYGENHUB

Benchmarks: commit after one manifest write and parallel diffs; fresh store size against Git (refs #41) 4f264d6f20b6

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-10-02 02:39 UTC
Signature
✔ signed by Andy McCall
Hash
4f264d6f20b65ff1f248b38ca76d5c8d9dea82368884f3e5cca01bca1113d299
Depends on
0389c3e82f6c 1d360c91a289
Depended on by
87828a0b1f36 dd6147dcf9c2
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.10.0 v0.11.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
1 atom, 0 tree operations, 1 file

Browse the tree at this change

modified docs/benchmarks.md +36 −0
…
918 unchanged lines
919 919
directories it listed (Git restamps its index the same way): the first
920 920
status after a checkout takes 0.15 s, the ones after it 0.10 s again.
921 921
922 +
923 +
### Commit: one manifest write, parallel diffs (2026-10-02, oxygen#41)
924 +
925 +
A commit's snapshot now hands its manifest rows to the commit, which
926 +
writes the manifest once with the new base's graph keys; before, the
927 +
snapshot wrote it and the commit read and rewrote it. The change builder
928 +
diffs edited text files in parallel before updating them one by one.
929 +
930 +
| | before | now | Git |
931 +
|---|---:|---:|---:|
932 +
| commit, one file, straight after the edit | 0.55 s | 0.34 to 0.45 s | 0.15 s |
933 +
| commit, 1 000 files | 0.99 s | 0.79 to 0.86 s | 1.1 to 1.2 s |
934 +
935 +
Of the one-file commit, about 135 ms is the operation's fsync: on ext4
936 +
with ordered data the first sync also writes the edited file's data.
937 +
Git's default commit does not sync loose objects. Of the 1 000-file
938 +
commit: building the change 72 ms (from 243), one read of the Linux
939 +
import's root change for the inline texts of about 90 of the files
940 +
(110 ms), rendering 97 ms, graph building 67 ms, the stat check 80 ms.
941 +
942 +
### Fresh store size and first commit (2026-10-02, P1 and S7)
943 +
944 +
`~/bench/p1.sh`: the Linux tip (95 942 files, 1.8 GB) committed fresh by
945 +
oxy and by Git in scratch copies, then gc.
946 +
947 +
| | oxy | Git |
948 +
|---|---:|---:|
949 +
| init and first commit | **25.2 s**, 3.1 GB peak | 30.8 s, 41 MB |
950 +
| objects after gc | **265 MB** | 285 MB |
951 +
| whole `.oxy` / `.git` | **278 MB** | 295 MB |
952 +
953 +
The bench repository's store is larger (290 MB of objects) because builds
954 +
before this one also stored the working-copy change a first commit's
955 +
snapshot made: an 85 MB change (21 MB packed) twice. A commit's snapshot
956 +
no longer stores it. The first commit's peak memory (S7, under 2 GB) is
957 +
still open: the walk holds every file's text.