Skirr prototype: local HTTP/1 comparison One worker pinned to CPU 0; wrk on CPUs 4-7; identical apps and Python. Access logs, request IDs, compression, caches and lifespan disabled. Medians of three five-second runs, each preceded by one-second warmup. CPU governor/energy settings unchanged; shared laptop with dynamic clocks. No TLS, HTTP/2, WebSockets or pipelining in the throughput workload. Exact body/status checked before/after each run, not on every wrk response. P99 below is median per-run wrk P99, not a pooled percentile. Timeout counter includes completed responses outside the 3s histogram. These measurements do not establish production readiness or general superiority. Connections: 64 Versions: {"fastapi": "0.143.1", "peregrine-server": "1.1.7", "uvloop": "0.23.0", "weft-server": "0.1.0"} Workload Server Req/s P99 ms IO failures >3s HTTP errors PSS MiB RPS range fastapi_json peregrine 9,455 10.31 0 0 0 55.3 9,362-9,524 fastapi_json skirr 8,404 12.66 0 0 0 38.5 8,273-8,523 fastapi_json weft 8,906 8.03 0 0 0 39.8 8,738-8,978 get_64k peregrine 27,724 5.04 0 0 0 32.9 26,045-27,806 get_64k skirr 21,538 5.46 0 0 0 21.6 20,625-22,193 get_64k weft 24,234 4.41 0 0 0 22.7 23,687-24,892 post_4k peregrine 59,766 2.21 0 0 0 33.7 59,382-62,283 post_4k skirr 42,883 2.90 0 0 0 18.2 42,371-43,153 post_4k weft 50,616 1.97 0 0 0 19.9 49,375-50,628 raw_get peregrine 74,748 1.73 0 0 0 32.9 74,726-75,048 raw_get skirr 53,051 1.96 0 0 0 18.2 52,343-53,236 raw_get weft 61,761 1.54 0 0 0 18.4 60,501-63,526 Streaming: app waits 50ms after the first chunk; 20 sequential samples. skirr first-byte 1.106ms; total 51.379ms peregrine first-byte 1.223ms; total 51.487ms weft first-byte 1.119ms; total 52.744ms Raw artifact: bench/results/review2-c64/results.json Connections: 256 Versions: {"fastapi": "0.143.1", "peregrine-server": "1.1.7", "uvloop": "0.23.0", "weft-server": "0.1.0"} Workload Server Req/s P99 ms IO failures >3s HTTP errors PSS MiB RPS range fastapi_json peregrine 9,292 39.80 0 0 0 56.5 9,124-9,307 fastapi_json skirr 8,267 43.90 0 0 0 39.2 8,113-8,360 fastapi_json weft 8,904 40.73 0 0 0 42.6 8,684-8,943 get_64k peregrine 26,622 15.41 0 0 0 34.0 26,066-28,214 get_64k skirr 20,879 23.66 0 0 0 34.3 20,360-20,928 get_64k weft 24,102 17.65 0 0 0 40.2 23,927-24,925 post_4k peregrine 63,516 7.20 0 0 0 38.9 60,931-64,033 post_4k skirr 37,584 11.79 0 0 0 20.4 37,425-38,542 post_4k weft 49,549 8.95 0 0 0 28.2 47,224-50,492 raw_get peregrine 77,425 6.06 0 0 0 34.0 76,735-78,045 raw_get skirr 49,107 10.02 0 0 0 20.3 48,612-49,606 raw_get weft 65,183 7.05 0 0 0 23.4 61,237-65,850 Streaming: app waits 50ms after the first chunk; 20 sequential samples. skirr first-byte 1.103ms; total 51.363ms peregrine first-byte 1.147ms; total 51.427ms weft first-byte 1.162ms; total 52.670ms Raw artifact: bench/results/review2-c256/results.json Total completed requests across these comparisons: 13,363,198 wrk histogram counter behavior: https://github.com/wg/wrk/blob/4.1.0/src/wrk.c#L301-L325