0.0.8: revalidated asset cache + opt-in zero-copy send#78
Merged
Conversation
Per-request statx (size + mtime + inode) on lookup: serve the baked response only while the file is unchanged; an in-place edit or atomic rename is detected and served live from the current file, so RAM never goes stale. The shared baked block is immutable (re-bakes on Reload()) - no per-request cross-thread mutation. Playground + Examples static handlers updated to match.
ServerConfig.ZeroCopySend injects a per-connection SEND_ZC sender (no per-call branch on the send path). The completion path handles the dual completion - the F_MORE data CQE then the F_NOTIF buffer-release - recycling the write slab only on the notif. Off by default; kTLS connections stay on plain SEND. Adds a raw-zc/raw-big Examples harness.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
0.0.8
Revalidated asset cache (
ioxide.file)Each cached asset is revalidated against disk on lookup via
statx(size + mtime + inode). Unchangedfiles serve from the baked HTTP response (hot path, no I/O); an in-place edit or an atomic
mv/rename is detected (inode mismatch) and served live from the current file, so the cache neverreturns stale bytes. The shared baked block is immutable — it re-bakes on
Reload()— so there's noper-request cross-thread mutation. Verified: in-place edit,
mv-replace, and large unbaked files allserve fresh; unchanged files keep the baked path. Playground + Examples static handlers updated.
Opt-in zero-copy send (
ioxide)ServerConfig.ZeroCopySendinjects a per-connectionIORING_OP_SEND_ZCsender, so the send hot pathhas no per-call branch. The completion path handles the dual completion — the
F_MOREdata CQE thenthe
F_NOTIFbuffer-release — recycling the write slab only on the notif. Off by default, andkTLS connections stay on plain
SEND(zero-copy buys nothing through the TLS ULP). Verifiedbyte-perfect on a 100 KB body including keep-alive slab reuse. The throughput win is NIC-bound and not
yet validated on a real interface (loopback won't show it).
Packages → 0.0.8
ioxide,ioxide.pg,ioxide.tls,ioxide.file,ioxide.redis.