lumbda/tests
russell@unturf.com dd961d2133 lumbda-www: asm-gc static file server for lumbda.com + caddy race
Ships examples/http-static-server.lsp — ~65 lines of portable Scheme
that reads files from a docroot (default ./www) and serves them over
HTTP/1.0 with MIME dispatch, path-traversal rejection, heap-snapshot
per request. Runs in any tier; target deployment is asm-gc for the
27 KB stripped binary + bounded memory backstop.

Required one asm fix first: heap_grow was mmap'ing fixed HEAP_SIZE
chunks, so any single allocation larger than a chunk (notably the
2.67 MB whitepaper PDF read via file->string) loop-looped through
.ha_overflow forever. Now heap_grow rounds required bytes up to
HEAP_SIZE multiples on oversize alloc, so a big request carves its
own big chunk in one go. Small allocs still land in standard-sized
chunks.

Two new benches:

tests/bench-lumbda-www.sh — drive N small + M large requests against
asm-gc, verify PDF round-trip, sample peak RSS. At 1000/100: 331 req/s
small, 120 req/s large (304 MiB/s), peak 15.5 MB.

tests/bench-www-race.sh — adjacent A/B vs caddy v2.5.1 on the same
docroot. Numbers on this laptop, concurrency 8, 2000 small + 200 large:

                         small req/s  PDF req/s  PDF MiB/s  peak RSS    binary
  lumbda-www (asm-gc)     375          137         349       7–16 MB    27 KB
  caddy file-server       358          231         588       38 MB      38 MB

Reading: lumbda edges caddy on small files (less per-request overhead),
caddy wins 1.7x on large files (sendfile zero-copy; we allocate the
whole file into a string and write it with one syscall). Both byte-
identical on the PDF. Memory: lumbda 2.5-5x less at steady state.
Binary size: 1400x smaller (27 KB vs 38 MB).

Feature gap: caddy has HTTPS, HTTP/2, range, middleware, etc. lumbda
has none of that yet — but for the specific job of serving lumbda.com's
six-file docroot it is viable right now.

Makefile adds `bench-lumbda-www` and `bench-www-race` targets.
137 asm no-GC + 137 asm GC tests still pass.
2026-04-19 12:12:59 -04:00
..
bench-3way.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-gc-adaptive.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-gc-arena.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-gc-http.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-gc-memory.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-hashset.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-lumbda-www.sh lumbda-www: asm-gc static file server for lumbda.com + caddy race 2026-04-19 12:12:59 -04:00
bench-proof.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
bench-www-race.sh lumbda-www: asm-gc static file server for lumbda.com + caddy race 2026-04-19 12:12:59 -04:00
functional.lsp rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
portal-benchmark.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
portal-cross-load.lsp asm/c/py: add (load), ports, write-file/file->string — full cross-impl parity 2026-04-16 16:37:40 -04:00
portal-cross-save.lsp asm/c/py: add (load), ports, write-file/file->string — full cross-impl parity 2026-04-16 16:37:40 -04:00
portal-cross-test.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
portal-exchange.lsp rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
portal-formats.lsp rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
rpc-chain-bench.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00
web-benchmark.sh rename: uncommonlisp -> lumbda throughout the repo 2026-04-19 10:20:11 -04:00