wip(blocks): a BAM flush reads and writes only the pages that hold the volume's bits (#155) [skip ci]
Not yet accepted. bam_flush_to_disk() and bam_sync_from_disk() read and wrote every page of the BAM; with the stick's BAM sized for 256 GiB (6144 devblocks, 24 MiB) every flush of a dirty block moved 24 MiB each way. They now touch only the pages that hold the slot's bits -- its reserved bits and one per user block (bam_pages_used()) -- the pages past them are never set, so the bytes on disk are the same. Test (qemu_session.py bam_flush, --target qemu-stick --stick-gib 16): three SAVE-BUFFERS of an Artemis block, each timed, then the BAM hashed. Before: 5.1 / 5.6 / 6.1 s (the 2 s limit fails; it was set after seeing this baseline). After: 1.1 / 1.1 / 1.1 s. The BAM's bytes the same either way: sha256 79197a40...b9e44b50, 5 non-zero bytes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
This commit is contained in:
Reference in New Issue
Block a user