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
