h2o
Infrastructure · C
High-performance C HTTP server using libh2o with multi-threaded event loops and native HTTP/2 support. Handlers answer /baseline11, /baseline2, /json/{count} — serialized per request from the dataset parsed at startup — and /static from files preloaded at boot. TLS on :8081 (HTTP/1.1) and :8443 (h2). No HTTP/3: libh2o's QUIC stack is not wired up in this embedded server.
Achievements
🥇 6 Gold · 🥈 4 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.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥇 Gold | Family composite | Composite · HTTP/2 | 1 of 4 |
| 🥇 Gold | Within its language | C · HTTP/2 | 1 of 3 |
| 🥇 Gold | Test profile | Connection · Baseline | 1 of 5 |
| 🥇 Gold | Test profile | Connection · Pipelined | 1 of 5 |
| 🥇 Gold | Test profile | Connection · Short-lived | 1 of 5 |
| 🥇 Gold | Test profile | HTTP/2 · Baseline | 1 of 4 |
| 🥈 Silver | Family composite | Composite · HTTP/1.1 | 2 of 5 |
| 🥈 Silver | Within its language | C · HTTP/1.1 | 2 of 4 |
| 🥈 Silver | Test profile | HTTP/2 · Static | 2 of 4 |
| 🥈 Silver | Test profile | Workload · JSON TLS | 2 of 3 |
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 | 2 of 5 | 3936 |
| HTTP/2 | 1 of 4 | 1441 |
Every result
Alpha Round, 8 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 | 3,641,609 | 1.12ms | 6.67ms | 6589.8% | 75MiB |
| Connection | Pipelined | 4,096 | 4,938,603 | 13.32ms | 34.70ms | 6419.3% | 69MiB |
| Connection | Short-lived | 4,096 | 2,651,569 | 1.51ms | 8.38ms | 6201.2% | 100MiB |
| Workload | JSON TLS | 4,096 | 1,229,462 | 4.73ms | 290.08ms | 6401.5% | 308MiB |
| HTTP/2 | Baseline | 256 | 16,106,978 | 820us | 15.81ms | 3033.0% | 117MiB |
| HTTP/2 | Baseline | 1,024 | 15,633,023 | 3.19ms | 87.91ms | 3087.6% | 185MiB |
| HTTP/2 | Static | 256 | 363,898 | 23.21ms | 504.73ms | 6362.6% | 154MiB |
| HTTP/2 | Static | 1,024 | 341,251 | 91.41ms | 1.55s | 6316.3% | 279MiB |
Compared with
The C entries around h2o on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs h2o | |
|---|---|---|---|
| nginx | 4710 | +20% | head to head |
| libreactorng | 3828 | -3% | head to head |
| libioma | 3819 | -3% | head to head |
Compare h2o with any C entry · Compare h2o with any entry, in any language · Every C entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry