Skip to content

0.0.8: revalidated asset cache + opt-in zero-copy send#78

Merged
MDA2AV merged 3 commits into
mainfrom
bump-0.0.8
Jun 19, 2026
Merged

0.0.8: revalidated asset cache + opt-in zero-copy send#78
MDA2AV merged 3 commits into
mainfrom
bump-0.0.8

Conversation

@MDA2AV

@MDA2AV MDA2AV commented Jun 19, 2026

Copy link
Copy Markdown
Owner

0.0.8

Revalidated asset cache (ioxide.file)

Each cached asset is revalidated against disk on lookup via statx (size + mtime + inode). Unchanged
files 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 never
returns stale bytes. The shared baked block is immutable — it re-bakes on Reload() — so there's no
per-request cross-thread mutation. Verified: in-place edit, mv-replace, and large unbaked files all
serve fresh; unchanged files keep the baked path. Playground + Examples static handlers updated.

Opt-in zero-copy send (ioxide)

ServerConfig.ZeroCopySend injects a per-connection IORING_OP_SEND_ZC sender, so the send hot path
has no per-call branch. 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, and
kTLS connections stay on plain SEND (zero-copy buys nothing through the TLS ULP). Verified
byte-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.

MDA2AV added 3 commits June 19, 2026 14:14
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.
@MDA2AV MDA2AV merged commit e219299 into main Jun 19, 2026
1 check passed
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