proxygen
Engine · C++
Meta's Proxygen HTTP engine: HTTPServer for HTTP/1.1, HTTP/1.1 TLS, h2c, HTTP/2 TLS, and RFC 6455 WebSockets, plus the mvfst-backed HQ server for HTTP/3 over QUIC.
Achievements
🥇 1 Gold · 🥈 1 Silver · 🥉 2 Bronze. 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.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥇 Gold | Within its language | C++ · WebSocket | 1 of 3 |
| 🥈 Silver | Within its language | C++ · HTTP/1.1 | 2 of 3 |
| 🥉 Bronze | Test profile | HTTP/2 · Baseline (h2c) | 3 of 5 |
| 🥉 Bronze | Test profile | WebSocket · Echo Short-lived | 3 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.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 20 of 23 | 1227 |
| HTTP/2 | 4 of 7 | 1128 |
| HTTP/3 | 4 of 5 | 714 |
| WebSocket | 5 of 9 | 1900 |
Every result
Alpha Round, 26 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 2,128,172 | 1.70ms | 3.71ms | 6681.0% | 149MiB |
| Connection | Pipelined | 4,096 | 1,857,311 | 31.39ms | 36.80ms | 6495.4% | 155MiB |
| Connection | Short-lived | 4,096 | 1,072,850 | 1.50ms | 10.70ms | 5561.4% | 79MiB |
| Workload | JSON Comp | 4,096 | 243,887 | 14.88ms | 60.50ms | 6190.8% | 1.7GiB |
| Workload | JSON Comp | 16,384 | 215,579 | 37.16ms | 380.40ms | 6106.2% | 2.2GiB |
| Workload | JSON TLS | 4,096 | 657,105 | 6.23ms | 93.70ms | 6366.4% | 208MiB |
| Workload | Static TLS | 1,024 | 587,589 | 1.73ms | 19.13ms | 6475.8% | 193MiB |
| HTTP/2 | Baseline | 256 | 5,845,844 | 4.14ms | 17.57ms | 6322.5% | 110MiB |
| HTTP/2 | Baseline | 1,024 | 5,374,723 | 17.95ms | 96.05ms | 6229.6% | 288MiB |
| HTTP/2 | Static | 256 | 587,147 | 12.14ms | 71.58ms | 6286.5% | 296MiB |
| HTTP/2 | Static | 1,024 | 578,070 | 53.33ms | 368.02ms | 5936.8% | 862MiB |
| HTTP/2 | Baseline (h2c) | 256 | 5,881,888 | 4.18ms | 14.28ms | 6428.8% | 104MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 5,720,475 | 17.29ms | 128.75ms | 6356.6% | 277MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 5,326,627 | 71.33ms | 282.27ms | 5970.7% | 915MiB |
| HTTP/2 | JSON (h2c) | 1,024 | 1,082,724 | 29.70ms | 139.48ms | 6317.7% | 351MiB |
| HTTP/2 | JSON (h2c) | 4,096 | 1,033,301 | 113.64ms | 616.24ms | 6431.6% | 1.2GiB |
| HTTP/3 | Baseline | 64 | 1,828,320 | 2.76ms | 6.27ms | 4421.8% | 609MiB |
| HTTP/3 | Static | 64 | 305,428 | 16.46ms | 34.25ms | 4552.5% | 386MiB |
| WebSocket | Echo | 512 | 3,179,995 | 160us | 295us | 6489.5% | 69MiB |
| WebSocket | Echo | 4,096 | 3,197,020 | 1.11ms | 2.38ms | 6483.9% | 126MiB |
| WebSocket | Echo | 16,384 | 3,227,631 | 2.00ms | 4.75ms | 6096.9% | 184MiB |
| WebSocket | Echo Pipelined | 512 | 48,010,665 | 169us | 308us | 6686.1% | 69MiB |
| WebSocket | Echo Pipelined | 4,096 | 49,666,723 | 1.16ms | 2.44ms | 6105.4% | 127MiB |
| WebSocket | Echo Pipelined | 16,384 | 47,020,665 | 2.38ms | 6.46ms | 5937.8% | 228MiB |
| WebSocket | Echo Short-lived | 512 | 981,328 | 78us | 305us | 4457.1% | 70MiB |
| WebSocket | Echo Short-lived | 4,096 | 1,063,324 | 76us | 227us | 4702.2% | 72MiB |
Compared with
The C++ entries around proxygen on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs proxygen | |
|---|---|---|---|
| drogon | 4461 | +264% | head to head |
| hical | 3352 | +173% | head to head |
| userver | 3256 | +165% | head to head |
| proxygen-coro | 1073 | -13% | head to head |
Compare proxygen with any C++ entry · Compare proxygen with any entry, in any language · Every C++ entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry