Repository navigation
feat(benchmarks): the boundary ladder, every rung, with rate and callers sweeps - #9
Closed
Immanuel-Fowler wants to merge 1 commit into
Closed
Immanuel-Fowler wants to merge 1 commit into
Immanuel-Fowler wants to merge 1 commit into
Conversation
…callers sweep The latency benchmark measured three serverlet kinds. The paper's claim is about four boundaries and the ownership below them, so the ladder now has every rung: in-process, sandboxed, secret, Python and TypeScript serverlets, and below a serverlet call, `shared let` and a plain `let`, timed per batch of a thousand statements because clock_micros has microsecond resolution. Two sweeps join the payload sweep. A call-rate sweep paces the int payload at 100 Hz and 1 kHz with the caller asleep between calls, so the actor and the child really go idle as they would under a host that ticks, and at 10 kHz spinning. A concurrent-callers sweep puts 2, 4 and 8 callers on one serverlet as branches of a parallel block, so every sample is one caller's round trip and the rows show what queueing costs; the process-based rungs queue, the in-process and sandboxed ones do not. run.py writes CSV, JSON and Markdown under benchmarks/results with an environment header, and the README's tables are pasted from that output rather than typed. The loops in main.orch are unrolled on purpose: a serverlet client has no type a task parameter can name, and a task cannot reach a top-level binding, so every timed loop lives inline. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Sep 21, 2026
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.
Stacked on #8 (
feat/sandbox-crash-and-grants); merge that first.What
benchmarks/landline_latencymeasures every rung of the boundary ladder with the same echo handlers, keeping the methodology (warm-up, then measured calls; p50, p90, p99, max; per-payload cases):shared letand a plainlet, timed per batch of 1,000 statements becauseclock_microshas microsecond resolution.int, a 1 KB string, a 1,000-elementint[].intpayload paced at 100 Hz and 1 kHz (the caller sleeps between calls, so the actor or child really idles, as under a ticking host) and at 10 kHz (spinning), beside unpaced.parallelblock; each sample is one caller's round trip.run.pywritesboundary_ladder.csv,boundary_ladder_samples.csv,boundary_ladder.json, andboundary_ladder.mdunderbenchmarks/results/(gitignored), with an environment header: CPU, OS, arch,orchestrate,rustc,cargo, Python, TypeScript toolchain and backend, wasmtime version, sample counts, commit SHA, dirty flag. The README's tables are pasted from the generated Markdown.--no-typescriptforces it).What one run showed (Apple M2)
shared letcosts about 9 ns per statement; the plainletrow reads 0 because LLVM folds the loop, which the notes say.Caveats
Recorded in
LIMITATIONS-notes.md: the plainletrow is the method's floor, microsecond quantisation under every low p50, the first sweep pays for being first, TypeScript maxima, and that concurrent callers are runtime futures rather than OS threads.Changelog entry under
[Unreleased]. No version bump.🤖 Generated with Claude Code