diff options
| author | eunhhu <[email protected]> | 2026-09-26 23:24:31 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-26 23:24:31 +0100 |
| commit | 2e7ad9f8488d4f02c688ec24d6d0b571b3fa61ec (patch) | |
| tree | 789183f42e3b68b797e7a09ef2b037e55d34ebfa /docs/research/072-qemu-4k-page-store.md | |
| parent | a51232af741cb952d7deb72f238c583919ababc0 (diff) | |
| download | pure-2e7ad9f8488d4f02c688ec24d6d0b571b3fa61ec.tar.gz pure-2e7ad9f8488d4f02c688ec24d6d0b571b3fa61ec.zip | |
Write each commit's head just before its bytes: one range per sync (081)
A tree store commit wrote its bytes over the written zeros of the tail
and its head into a slot at the start of the file: two ranges, and on
the Pi's SD card a sync of two ranges costs about twice one (2.4 ms
against 1.2 ms). A commit now writes a 128-byte record (its head) at
the published end and its bytes right after it, then syncs once. Every
16 commits the head also goes into the older slot. The newest commit
is found from the newer slot's head, or from the newest head this
process has seen in the file while its record is still there, along
the records whose bytes are whole; a torn record or bytes end the walk
at the commit before, which the next writer overwrites. Slots of this
format are PURETRE3; files of the earlier one are read and continued.
Store commits went from 220-233/s to 371-396/s (p50 2.5 to 1.3 ms),
and the scoreboard's durable posts from 13-16k/s to 21-26k/s with 64
connections and from 2.2-2.4k/s to 2.9-3.9k/s with 8, measured
alternately with the previous build. The torn head check now tears a
slot (the walk goes on from the other) and the newest record (a new
process sees the commit before); a new check walks 42 commits from the
slots, in a fresh process too, and stops at a damaged record.
Diffstat (limited to 'docs/research/072-qemu-4k-page-store.md')
0 files changed, 0 insertions, 0 deletions
