Performance reports
See also: documentation of other kinds of benchmarking we do.
-
Benchmarking rustls 0.23.31 vs OpenSSL 3.5.15 vs BoringSSL on x86_64
Published: July 31, 2025
System configuration
We ran the benchmarks on a bare-metal server with the following characteristics:
- OS: Debian 12 (Bookworm).
- C/C++ toolchains: GCC 12.2.0 and Clang 14.0.6.
- CPU: Xeon E-2386G (supporting AVX-512).
- Memory: 32GB.
- Extra configuration: hyper-threading disabled, dynamic frequency scaling disabled, cpu scaling governor set to performance for all cores.
Versions
The benchmarking tool used for both OpenSSL and BoringSSL was openssl-bench 82b86b22.
This was built from source with its makefile.
BoringSSL
The tested version of BoringSSL is 0.20250701.0, which was the most recent point on master when we started these measurements.
-
Measuring and (slightly) Improving Post-Quantum Handshake Performance
Published: December 17, 2024
To defend against the potential advent of “Cryptographically Relevant Quantum Computers” there is a move to using “hybrid” key exchange algorithms. These glue together a widely-deployed classical algorithm (like X25519) and a new post-quantum-secure algorithm (like ML-KEM) and treat the result as one TLS-level key exchange algorithm (like X25519MLKEM768).
In this report, first we’ll measure the additional cost of post-quantum-secure key exchange. Then we’ll describe and measure an optimization we have implemented.
Headline measurements
All these measurements are taken on our amd64 benchmarking machine, which has a Xeon E-2386G CPU. We’ll compare:
-
Measuring and Improving rustls's Multithreaded Performance
Published: November 28, 2024
System configuration
We ran the benchmarks on a bare-metal server with the following characteristics:
- OS: Debian 12 (Bookworm).
- C/C++ toolchains: GCC 12.2.0 and Clang 14.0.6.
- CPU: Ampere Altra Q80-30, 80 cores.
- Memory: 128GB.
- All cores set to
performanceCPU frequency governor.
This is the Hetzner RX170.
How the benchmarks work
Compared to previous reports, the benchmark tool can now perform the same benchmarks in many threads simultaneously. Each thread runs the same benchmarking operation as before, and threads do not contend with each other except via the internals of the TLS library.
-
Benchmarking rustls 0.23.15 vs OpenSSL 3.3.2 vs BoringSSL on ARM64
Published: October 31, 2024
System configuration
We ran the benchmarks on a bare-metal server with the following characteristics:
- OS: Debian 12 (Bookworm).
- C/C++ toolchains: GCC 12.2.0 and Clang 14.0.6.
- CPU: Ampere Altra Q80-30, 80 cores.
- Memory: 128GB.
- All cores set to
performanceCPU frequency governor.
This is the Hetzner RX170.
Versions
The benchmarking tool used for both OpenSSL and BoringSSL was openssl-bench d5de57d9.
This was built from source with its makefile.
BoringSSL
The tested version of BoringSSL is 76968bb3d5, which was the most recent point on master when we started the previous measurements.
-
Benchmarking rustls 0.23.15 vs OpenSSL 3.3.2 vs BoringSSL on x86_64
Published: October 18, 2024
System configuration
We ran the benchmarks on a bare-metal server with the following characteristics:
- OS: Debian 12 (Bookworm).
- C/C++ toolchains: GCC 12.2.0 and Clang 14.0.6.
- CPU: Xeon E-2386G (supporting AVX-512).
- Memory: 32GB.
- Extra configuration: hyper-threading disabled, dynamic frequency scaling disabled, cpu scaling governor set to performance for all cores.
Versions
The benchmarking tool used for both OpenSSL and BoringSSL was openssl-bench d5de57d9.
This was built from source with its makefile.
BoringSSL
The tested version of BoringSSL is 76968bb3d5, which was the most recent point on master when we started these measurements.