Benchmarking rustls 0.23.37 vs OpenSSL 3.6.1 vs BoringSSL on x86_64
2026-03-07
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.
- Rust toolchain: 1.94.0
- 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 30cd935, which was the most recent point on main when we started these measurements.
BoringSSL was built from source with CC=clang CXX=clang++ cmake -DCMAKE_BUILD_TYPE=Release.
OpenSSL
The tested version of OpenSSL is 3.6.1, which was the latest release at the time of writing.
OpenSSL was built from source with ./Configure ; make -j12.
Rustls
The tested version of rustls is 0.23.37, which was the latest stable release at the time of writing. This was used with aws-lc-rs 1.16.0 / aws-lc-sys 0.37.1.
Measurements
BoringSSL was tested with this command:
~/bench/openssl-bench
$ BENCH_MULTIPLIER=16 setarch -R make measure BORINGSSL=1
OpenSSL was tested with this command:
~/bench/openssl-bench
$ BENCH_MULTIPLIER=16 setarch -R make measure
rustls was tested with this command:
~/bench/rustls
$ BENCH_MULTIPLIER=16 setarch -R make -f admin/bench-measure.mk measure
Results
Transfer measurements are in megabytes per second. Handshake units are handshakes per second.
| BoringSSL 30cd935 | OpenSSL 3.6.1 | rustls 0.23.37 | |
|---|---|---|---|
| transfer, 1.2, aes-128-gcm, sending | 8291.9 | 6610.19 | 8133.85 |
| transfer, 1.2, aes-128-gcm, receiving | 6722.26 | 7129.43 | 7946.96 |
| transfer, 1.3, aes-256-gcm, sending | 7564.71 | 5844.35 | 7421.02 |
| transfer, 1.3, aes-256-gcm, receiving | 6217.68 | 6237.52 | 7332.91 |
| BoringSSL 30cd935 | OpenSSL 3.6.1 | rustls 0.23.37 | |
| full handshakes, 1.2, rsa, client | 5657.81 | 3186.87 | 8122.99 |
| full handshakes, 1.2, rsa, server | 1476.66 | 2154.41 | 2835.45 |
| full handshakes, 1.2, ecdsa, client | 3545.32 | 2201.16 | 4344.30 |
| full handshakes, 1.2, ecdsa, server | 9057.57 | 5226.96 | 13,524.99 |
| full handshakes, 1.3, rsa, client | 3179.48 | 2219.64 | 4766.63 |
| full handshakes, 1.3, rsa, server | 1302.03 | 1712.64 | 2357.36 |
| full handshakes, 1.3, ecdsa, client | 2364.8 | 1642.88 | 3160.39 |
| full handshakes, 1.3, ecdsa, server | 4981.38 | 3176.58 | 6786.26 |
| BoringSSL 30cd935 | OpenSSL 3.6.1 | rustls 0.23.37 | |
| resumed handshakes, 1.2, client | 45,390.3 | 21,136.9 | 63,870.34 |
| resumed handshakes, 1.2, server | 44,429 | 22,647.1 | 72,480.52 |
| resumed handshakes, 1.3, client | 4648.41 | 3594.88 | 6735.88 |
| resumed handshakes, 1.3, server | 5687.32 | 3780 | 7249.08 |