HttpArena
Frameworks

nginx

Infrastructure · C

Nginx with a custom C handler module, compiled with -O3 -march=native. The module answers /baseline11, /baseline2 and /json/{count}, serializing the JSON body per request from the dataset parsed at worker startup; /static/* is served by nginx core's sendfile path. TLS via quictls: HTTP/1.1 on :8081, h2 and h3 on :8443.

Achievements

🥇 4 Gold · 🥈 6 Silver. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.

MedalAwardFieldRank
🥇 GoldFamily compositeComposite · HTTP/1.11 of 5
🥇 GoldWithin its languageC · HTTP/1.11 of 4
🥇 GoldTest profileHTTP/2 · Static1 of 4
🥇 GoldTest profileWorkload · JSON TLS1 of 3
🥈 SilverFamily compositeComposite · HTTP/22 of 4
🥈 SilverWithin its languageC · HTTP/22 of 3
🥈 SilverTest profileConnection · Baseline2 of 5
🥈 SilverTest profileConnection · Pipelined2 of 5
🥈 SilverTest profileConnection · Short-lived2 of 5
🥈 SilverTest profileHTTP/2 · Baseline2 of 4

Composite rank

Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.

FamilyRankComposite
HTTP/1.11 of 54710
HTTP/22 of 41212
HTTP/31 of 22000

Every result

Alpha Round, 16 runs. Requests per second is the best of three; latency, CPU and memory come from that run.

CategoryProfileConnsReq/secAvgp99CPUMemory
ConnectionBaseline4,0963,284,5131.25ms6.79ms6443.8%3.5GiB
ConnectionPipelined4,0964,037,34516.23ms35.90ms6388.7%3.5GiB
ConnectionShort-lived4,0962,626,2971.53ms7.65ms6233.0%3.5GiB
WorkloadJSON TLS4,0961,313,7553.28ms52.31ms6423.2%3.6GiB
WorkloadStatic TLS1,024720,8691.88ms29.93ms6603.6%3.5GiB
HTTP/2Baseline2563,414,7506.46ms46.53ms6485.1%3.5GiB
HTTP/2Baseline1,0243,320,28526.99ms151.79ms6399.1%3.6GiB
HTTP/2Static256802,09010.57ms76.31ms6600.9%3.6GiB
HTTP/2Static1,024796,60739.69ms279.54ms6350.2%3.8GiB
HTTP/2Baseline (h2c)2562,456,32911.02ms70.14ms6601.1%3.5GiB
HTTP/2Baseline (h2c)1,0242,490,27139.34ms200.30ms6614.6%3.6GiB
HTTP/2Baseline (h2c)4,0962,519,351144.83ms579.78ms6500.5%3.7GiB
HTTP/2JSON (h2c)1,0241,730,83818.45ms173.19ms6569.9%3.5GiB
HTTP/2JSON (h2c)4,0961,691,74073.74ms396.79ms6582.9%3.7GiB
HTTP/3Baseline644,849,624833us1.49ms3066.8%3.5GiB
HTTP/3Static64361,02512.42ms46.60ms4957.1%3.7GiB

Compared with

The C entries around nginx on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.

EntryCompositevs nginx
h2o3936-16%head to head
libreactorng3828-19%head to head

Compare nginx with any C entry · Compare nginx with any entry, in any language · Every C entry, ranked

Results updated · How the benchmark is run · The machine · Add or fix an entry