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 three five-second runs, each preceded by one-second warmup. 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 counter includes completed responses outside the 3s histogram. These measurements do not establish production readiness or general superiority. Connections: 64 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 >3s HTTP errors PSS MiB RPS range fastapi_json peregrine 25,686 3.74 0 0 0 55.2 25,610-26,172 fastapi_json skirr 24,085 5.28 0 0 0 38.0 24,001-24,301 fastapi_json skirr-before 23,896 5.31 0 0 0 38.0 23,867-23,912 fastapi_json weft 23,855 4.72 0 0 0 39.6 23,812-23,950 get_64k peregrine 72,836 1.89 0 0 0 32.8 72,383-72,858 get_64k skirr 81,665 1.79 0 0 0 17.2 81,613-82,607 get_64k skirr-before 79,804 1.62 0 0 0 17.3 79,153-80,145 get_64k weft 65,162 1.87 0 0 0 22.3 64,972-65,174 post_4k peregrine 165,069 1.14 0 0 0 33.4 162,469-166,791 post_4k skirr 162,582 0.87 0 0 0 17.2 162,192-163,829 post_4k skirr-before 146,976 1.35 0 0 0 17.3 145,502-148,458 post_4k weft 136,312 1.08 0 0 0 19.7 136,043-138,392 raw_get peregrine 206,813 0.84 0 0 0 33.0 203,419-207,816 raw_get skirr 213,732 1.03 0 0 0 17.1 213,276-217,278 raw_get skirr-before 196,842 0.74 0 0 0 17.3 194,844-197,085 raw_get weft 169,105 1.13 0 0 0 18.4 163,985-169,527 Sampled server CPU clocks (MHz; median per-run mean, full observed range): peregrine 4447; 4200-4700 skirr 4454; 4200-4700 skirr-before 4451; 4200-4700 weft 4429; 4166-4700 Optimized Skirr change versus same-session saved baseline: fastapi_json +0.8%; versus Weft +1.0%; versus Peregrine -6.2% get_64k +2.3%; versus Weft +25.3%; versus Peregrine +12.1% post_4k +10.6%; versus Weft +19.3%; versus Peregrine -1.5% raw_get +8.6%; versus Weft +26.4%; versus Peregrine +3.3% Streaming: app waits 50ms after the first chunk; 20 sequential samples. skirr first-byte 0.637ms; total 50.746ms weft first-byte 0.522ms; total 51.739ms peregrine first-byte 0.336ms; total 50.498ms skirr-before first-byte 0.472ms; total 50.594ms Raw artifact: bench/results/peregrine-round2-c64/results.json Connections: 256 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 >3s HTTP errors PSS MiB RPS range fastapi_json peregrine 25,672 14.64 0 0 0 56.4 25,608-25,776 fastapi_json skirr 23,960 17.41 0 0 0 38.0 23,915-24,150 fastapi_json skirr-before 23,636 17.76 0 0 0 38.0 23,385-23,650 fastapi_json weft 23,990 16.95 0 0 0 44.3 23,930-24,081 get_64k peregrine 70,308 5.28 0 0 0 35.8 70,283-70,495 get_64k skirr 78,822 5.08 0 0 0 18.1 78,768-79,859 get_64k skirr-before 76,716 5.63 0 0 0 18.2 76,391-76,842 get_64k weft 54,741 7.30 0 0 0 39.6 54,324-55,144 post_4k peregrine 157,020 2.90 0 0 0 38.7 155,884-157,405 post_4k skirr 163,850 2.61 0 0 0 18.1 162,442-164,512 post_4k skirr-before 146,976 2.85 0 0 0 18.2 146,455-147,200 post_4k weft 133,698 3.07 0 0 0 28.4 133,267-134,326 raw_get peregrine 207,066 2.35 0 0 0 35.9 204,941-208,996 raw_get skirr 219,705 2.21 0 0 0 17.2 216,631-220,982 raw_get skirr-before 201,497 2.08 0 0 0 18.2 199,502-202,101 raw_get weft 174,922 3.11 0 0 0 23.3 174,636-176,387 Sampled server CPU clocks (MHz; median per-run mean, full observed range): peregrine 4258; 399-4687 skirr 4311; 399-4700 skirr-before 4303; 400-4700 weft 4311; 399-4700 Optimized Skirr change versus same-session saved baseline: fastapi_json +1.4%; versus Weft -0.1%; versus Peregrine -6.7% get_64k +2.7%; versus Weft +44.0%; versus Peregrine +12.1% post_4k +11.5%; versus Weft +22.6%; versus Peregrine +4.3% raw_get +9.0%; versus Weft +25.6%; versus Peregrine +6.1% Streaming: app waits 50ms after the first chunk; 20 sequential samples. skirr first-byte 0.622ms; total 50.734ms weft first-byte 0.659ms; total 51.886ms peregrine first-byte 0.352ms; total 50.506ms skirr-before first-byte 0.331ms; total 50.519ms Raw artifact: bench/results/peregrine-round2-c256/results.json Total completed requests across these comparisons: 54,257,980 wrk histogram counter behavior: https://github.com/wg/wrk/blob/4.1.0/src/wrk.c#L301-L325