This repository provides benchmarks that measure the throughput and memory footprint you get from OpenSSL 3.x. They have been used in the past to compare performance against rustls (see the results of December 2023 and July 2019).
The measured aspects are:
- Bulk data transfer throughput in MiB/s;
- Handshake throughput (full, session id, tickets) in handshakes per second;
- Memory usage per connection.
The code expects a built OpenSSL tree in ../openssl/
and the rustls repository in ../rustls
.
Optionally you may provide a BoringSSL tree in ../boringssl/
, and select it using make ... BORINGSSL=1
make measure
: runs bulk transfer and handshake throughput benchmarks using a predefined list of cipher suites.make memory
: measures memory usage for different amounts of connections.make threads
: measures bulk transfer and handshake throughput benchmarks over a range of concurrency levels.
We usually extend the duration of the benchmarks in an attempt to neutralize the effect of cold CPU
and page caches, giving us more accurate results. This is done through the BENCH_MULTIPLIER
environment variable, which tells the benchmark runner to multiply the amount of work done. For
instance, BENCH_MULTIPLIER=8
will ensure we do 8 times the work.