Skip to content

perf: read and write runs of consecutive sectors in one go - #85

Open
francisdb wants to merge 1 commit into
mdsteele:masterfrom
francisdb:perf/contiguous-sector-io
Open

perf: read and write runs of consecutive sectors in one go#85
francisdb wants to merge 1 commit into
mdsteele:masterfrom
francisdb:perf/contiguous-sector-io

Conversation

@francisdb

@francisdb francisdb commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

A chain read or wrote one sector per call to the underlying reader or writer. Sectors of a chain are almost always consecutive in the file, so a chain now reads and writes through as many consecutive sectors as the buffer covers in one call (Sectors::read_contiguous / write_contiguous, Chain::run_len), and a write past the end of the chain adds all the sectors it needs before writing.

Writing 50 streams of 1 MiB to memory: 14.4 ms to 11.0 ms. File-backed writes barely move yet, because growing a chain still costs two FAT entry writes and a zero fill per sector; batching that allocation is a follow-up PR built on this one.

Tests cover multi-sector writes whose sectors are and are not consecutive (reused free sectors), appends starting inside an existing sector, chains that outgrow a FAT sector, and reads spanning runs.

Chains went through the underlying reader or writer one sector per
call. Consecutive sectors are now read or written in a single call.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant