docs(sync): record the esp_map v2 verdict and cache removal

Run 4: memory discipline verified (1833 KB flat, no OOM) but 0 hits
with the small maps demonstrably retained — window-repetition theory
refuted, sub-second bar failed (splice 2.83 s cold / ~2 s steady).
Decision: wire the splice in anyway (~9-10 s cold real-repo :sync vs
611 s/OOM for every alternative). Run 5: cache removal confirmed
free; the ~1.85 MB "resident" was mwindow's live window set, which
makes the mwindow opts in shipping git_sync.rs load-bearing.
This commit is contained in:
Julien Calixte
2026-07-13 00:20:12 +02:00
parent 1a5e1736f5
commit 9309f3f239
2 changed files with 102 additions and 14 deletions

View File

@@ -43,10 +43,27 @@ mechanism**, not a tuning knob.
> excluded (`odb.read_header(packed)` = 470 ms; the strict-object-creation
> theory was refuted — strict-off changed nothing). **esp_map.c v2 built**:
> cache admission keyed on FILE size ≥ 1 MB so the hot small windows cache, and
> evict-on-`p_munmap` to a 2 MB low-water mark fixes the 7.4 MB OOM. **Final
> `git_bench` verdict pending — if splice lands sub-second, proceed with the
> firmware plumbing below.** Full trail: the splice-bench, root-cause and
> second-localization sections of the tradeoff curve.
> evict-on-`p_munmap` to a 2 MB low-water mark fixes the 7.4 MB OOM.
>
> **Final `git_bench` verdict (run 4, same evening): the memory fix is
> VERIFIED (resident 1833 KB flat, 6.4 MB heap free all run — no OOM), the
> window-cache theory is REFUTED (v2 retains the small maps and still scored
> 0 hits in 313 misses — the small reads hit unique offsets every time;
> `mwindow` already absorbs true repetition), and the sub-second bar FAILED:
> splice 2.83 s cold / ~2 s steady-state, commit(None) 713 ms. Decision:
> WIRE IT IN ANYWAY** — ~22.8 s on the real repo vs 611 s/OOM for every
> alternative puts a full cold `:sync` at ~910 s, which ships. The residual
> ~360 ms/loose-write ≈ 8 unique small SD round-trips; next suspect is FAT
> directory-op cost in freshen/refresh (instrumentation pass for later, not a
> prerequisite). **The cache was then REMOVED entirely (run 5 confirmation):
> esp_map.c is now the plain malloc-read/free-at-munmap emulation** — run 5's
> read pattern was byte-identical to run 4 (even 15 reads better; v2's
> eviction fought mwindow), warm splice identical at 1.95 s, and the ~1.85 MB
> "resident" turned out to be mwindow's live open-window set, not cache
> retention — which is one more reason the mwindow opts below are mandatory
> in shipping `git_sync.rs`. **Proceed with the firmware plumbing below.**
> Full trail: the splice-bench, root-cause, second-localization and
> final-bench sections of the tradeoff curve.
## The fix — O(depth) TreeBuilder walk