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. Server allocator/GC defaults retained; Skirr does not alter application GC policy. Medians of repeated runs; counts, duration and warmup are recorded per matrix. Temporary performance-profile hold for final matrices; CPU clocks sampled per run. 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 semantics follow the recorded generator; all counters are retained. These measurements do not establish production readiness or general superiority. Connections: 64; repeats: 5; duration: 8s; warmup: 1s; offered rate: unlimited Power profile: performance 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 Timeouts HTTP errors PSS MiB RPS range P99 range ms fastapi_json peregrine 26,145 3.71 0 0 0 55.1 26,059-26,466 3.52-3.92 fastapi_json skirr 25,340 3.76 0 0 0 38.0 25,151-25,569 3.60-4.13 fastapi_json skirr-before 25,475 3.68 0 0 0 38.0 25,196-25,629 3.53-4.14 Sampled server CPU clocks (MHz; median per-run mean, full observed range): peregrine 4529; 400-4700 skirr 4569; 4200-4700 skirr-before 4565; 4200-4700 Optimized Skirr change versus same-session saved baseline: fastapi_json -0.5%; versus Peregrine -3.1% Raw artifact: bench/results/latency-round4-c64/results.json Connections: 256; repeats: 5; duration: 8s; warmup: 1s; offered rate: unlimited Power profile: performance 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 Timeouts HTTP errors PSS MiB RPS range P99 range ms fastapi_json peregrine 26,317 13.28 0 0 0 56.3 25,892-26,600 12.49-16.31 fastapi_json skirr 25,401 14.97 0 0 0 38.0 25,068-25,429 11.99-15.00 fastapi_json skirr-before 25,236 15.20 0 0 0 38.0 25,137-25,389 12.59-15.29 Sampled server CPU clocks (MHz; median per-run mean, full observed range): peregrine 4437; 400-4700 skirr 4444; 400-4700 skirr-before 4497; 400-4700 Optimized Skirr change versus same-session saved baseline: fastapi_json +0.7%; versus Peregrine -3.5% Raw artifact: bench/results/latency-round4-c256/results.json Connections: 64; repeats: 3; duration: 5s; warmup: 1s; offered rate: unlimited Power profile: performance 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 Timeouts HTTP errors PSS MiB RPS range P99 range ms post_4k peregrine 169,376 0.86 0 0 0 33.5 164,869-170,093 0.74-2.35 post_4k skirr 173,349 0.61 0 0 0 17.2 172,359-174,894 0.60-0.99 post_4k skirr-before 171,826 0.61 0 0 0 17.2 171,196-171,836 0.57-0.69 raw_get peregrine 208,930 0.59 0 0 0 32.5 207,489-210,787 0.55-0.62 raw_get skirr 223,293 0.63 0 0 0 17.2 222,141-224,232 0.51-0.65 raw_get skirr-before 219,536 0.59 0 0 0 17.1 218,867-219,721 0.55-0.81 Sampled server CPU clocks (MHz; median per-run mean, full observed range): peregrine 4495; 4200-4700 skirr 4525; 4264-4700 skirr-before 4478; 4200-4700 Optimized Skirr change versus same-session saved baseline: post_4k +0.9%; versus Peregrine +2.3% raw_get +1.7%; versus Peregrine +6.9% Streaming: app waits 50ms after the first chunk; 20 sequential samples. skirr first-byte 0.643ms; total 50.726ms peregrine first-byte 0.654ms; total 50.816ms skirr-before first-byte 0.619ms; total 50.800ms Raw artifact: bench/results/latency-round4-controls-c64/results.json Connections: 256; repeats: 3; duration: 5s; warmup: 1s; offered rate: unlimited Power profile: performance 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 Timeouts HTTP errors PSS MiB RPS range P99 range ms post_4k peregrine 159,926 2.72 0 0 0 38.8 158,523-162,221 2.61-2.93 post_4k skirr 163,193 2.72 0 0 0 18.1 160,385-168,524 2.44-11.14 post_4k skirr-before 160,233 2.67 0 0 0 18.1 156,373-162,487 2.60-2.68 raw_get peregrine 208,492 2.23 0 0 0 33.9 207,903-210,360 1.94-2.33 raw_get skirr 228,182 2.06 0 0 0 18.1 228,137-229,612 1.91-2.29 raw_get skirr-before 217,799 1.74 0 0 0 17.2 217,548-219,441 1.70-1.92 Sampled server CPU clocks (MHz; median per-run mean, full observed range): peregrine 4315; 399-4700 skirr 4370; 980-4686 skirr-before 4330; 401-4687 Optimized Skirr change versus same-session saved baseline: post_4k +1.8%; versus Peregrine +2.0% raw_get +4.8%; versus Peregrine +9.4% Streaming: app waits 50ms after the first chunk; 20 sequential samples. skirr first-byte 0.590ms; total 50.725ms peregrine first-byte 0.620ms; total 50.681ms skirr-before first-byte 0.638ms; total 50.810ms Raw artifact: bench/results/latency-round4-controls-c256/results.json Total completed requests across these comparisons: 41,177,246 wrk histogram counter behavior: https://github.com/wg/wrk/blob/4.1.0/src/wrk.c#L301-L325 wrk2 corrected fixed-rate histograms: https://github.com/giltene/wrk2/tree/44a94c17d8e6a0bac8559b53da76848e430cb7a7