Skip to content

HTTP and HTTPS Performance

The charts were measured before the bundled Beast headers were removed. Standalone HTTP/WebSocket results apply only to that measured revision; current builds use Boost.

Introduction | Usage

Local Results

Release local loopback: HTTP/1.1 POST echoes a 1024-byte body, 16 clients, window 16 and no extra application computation.

HTTP

HTTP throughput by IO model

HTTP p99 RTT by IO model

  • Four contexts/one thread each has the highest throughput median and lowest p99 median for both dependency combinations.
  • Moving from one context/two threads to one context/four threads increases throughput medians and p99 medians. The p99 run ranges overlap.

Complete HTTP report

HTTPS

HTTPS throughput by IO model

HTTPS p99 RTT by IO model

  • Four contexts/one thread each has the highest throughput median and lowest p99 median for both dependency combinations.
  • HTTPS has lower throughput medians than HTTP at the same load and thread model.

Complete HTTPS report · Test environment · Metrics and statistics

Payload, batch and execution comparisons · HTTPS comparison

Reproduce

Build from the repository root with Boost. With Visual Studio, add --config Release to the build command and run the .exe under benchmarks/Release/.

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
  -DARKNET_ENABLE_SSL=ON -DARKNET_BUILD_BENCHMARKS=ON \
  -DARKNET_USE_BOOST_ASIO=ON
cmake --build build --target arknet_loopback_benchmark --parallel 3
for repetition in 1 2 3; do
  for protocol in http https; do
    build/benchmarks/arknet_loopback_benchmark \
      --protocol "$protocol" --certs tests/certs \
      --payload 1024 --clients 16 --window 16 \
      --io-model shared --io-threads 1 --work 0 --warmup 0.25 --seconds 1 \
      > "build/${protocol}-${repetition}.json" || exit 1
  done
done

This loop compares HTTP and HTTPS with 1024-byte bodies, 16 clients, window 16 and one context/one thread over keep-alive connections. It collects three fresh-process measurements per protocol, saving each result separately. Change --io-threads to 2 or 4 for a shared context, or use --io-model sharded --io-threads 4 for four contexts/one thread each. The complete shell matrix is in Testing. HTTPS adds TLS to the same exchange. Each connection keeps 16 requests outstanding, so RTT includes pipeline queueing. Test certificates are for local loopback only.

Route handlers run on the session’s serialized lane. Adding threads cannot parallelize one connection’s HTTP/1 response stream; see IO models for workload choices.

The test includes parsing, serialization, send queues and scheduling but does not isolate route dispatch or TLS handshake rate; repeat with the actual route table and middleware. HTTP/2 and HTTP/3 remain TODO, with no corresponding performance results.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close