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: 3; duration: 30s; warmup: 1s; offered rate: 20000
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 19,974 9.79 0 0 0 55.1 19,974-19,974 9.15-9.94
fastapi_json skirr 19,974 8.77 0 0 0 38.0 19,974-19,975 8.49-9.85
fastapi_json skirr-before 19,974 9.14 0 0 0 38.0 19,964-19,974 8.98-10.43
Sampled server CPU clocks (MHz; median per-run mean, full observed range):
peregrine 4306; 598-4700
skirr 4496; 400-4700
skirr-before 4555; 400-4700
Optimized Skirr change versus same-session saved baseline:
fastapi_json +0.0%; versus Peregrine +0.0%
Raw artifact: bench/results/latency-round4-rate20k-c64/results.json
Total completed requests across these comparisons: 5,392,996
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