HTTP (L7) proxy benchmark · open-loop ramp · c1k-64

request throughput 20261007-024759

Every proxy driven through the identical linear ramp (zrk, open-loop, coordinated-omission corrected) at 1000 connections. Throughput and CPU span the full ramp. The table's p50 / p99 are each proxy's latency at a common 2k req/s reference load — a shared, light, sub-knee rate where the number reflects per-request cost rather than queueing.

proxymax sustained req/sp50 @ 2kp99 @ 2kpeak memstatus
zoxy0.9.0 @935a2f34966.9973k0.34ms1.00ms199.5MiBok
nginx1.3126.3987k0.37ms0.81ms63.2MiBok
haproxy3.4.624.5777k0.38ms1.26ms95.4MiBok
pingora0.813.9679k0.38ms0.99ms58.8MiBok
envoy—9.009k0.50ms1.41ms75.4MiBok

Successful req/s vs offered

open-loop ramp; dashed gray = perfect keep-up

020k40k60k80k020k40k60k80koffered load (req/s)req/s

Proxy CPU vs offered

container cores sampled from cAdvisor at 1Hz, on the ramp's own clock

00.250.50.7511.3020k40k60k80koffered load (req/s)cores

p99 latency vs offered (while keeping up)

per-window tail (log scale); each line stops where that proxy stops keeping up

0.11101001k020k40k60k80koffered load (req/s)ms

Load shed vs offered

offered load the proxy couldn't serve (1 − achieved/offered); the first few seconds include the generator's own ramp-up shortfall, which is not the proxy's

0%20%40%60%80%100%020k40k60k80koffered load (req/s)

Latency distribution · HdrHistogram (whole run)

zoxy

latency by percentile · raw zoxy.hgrm

010k20k30kp0p90p99p99.9p99.99p99.99900000000001p99.9999p99.99999000000001p99.99999899999999percentilems

haproxy

latency by percentile · saturated at 60s — tail percentiles are a floor, not a value · raw haproxy.hgrm

020k40k60k80kp0p90p99p99.9p99.99p99.99900000000001p99.9999p99.99999000000001percentilems

nginx

latency by percentile · saturated at 60s — tail percentiles are a floor, not a value · raw nginx.hgrm

020k40k60k80kp0p90p99p99.9p99.99p99.99900000000001p99.9999p99.99999000000001percentilems

pingora

latency by percentile · saturated at 60s — tail percentiles are a floor, not a value · raw pingora.hgrm

020k40k60k80kp0p90p99p99.9p99.99p99.99900000000001p99.9999p99.99999000000001percentilems

envoy

latency by percentile · saturated at 60s — tail percentiles are a floor, not a value · raw envoy.hgrm

020k40k60k80kp0p90p99p99.9p99.99p99.99900000000001p99.9999p99.99999000000001percentilems