☰
rustls 0.23.37 基准实测:与 OpenSSL 3.6.1、BoringSSL 在 x86_64 上的吞吐与握手性能对比
2026/9/28 8:24:33 网站建设 项目流程
  • 网络安全
  • 密码学
  • 网络

【免费下载链接】rustls

A modern TLS library in Rust

项目地址:https://gitcode.com/gh_mirrors/ru/rustls
点击查看免费下载

本文基于 rustls 官方性能报告(website/content/perf/2026-03-07-report.md)整理,完整复现 rustls 0.23.37 与 OpenSSL 3.6.1、BoringSSL 30cd935 在同一台裸金属服务器上的对比方法、完整数据与可复现命令。读完本文,你可以掌握这套基准的度量口径(MB/s 与 handshakes/s)、干扰抑制手段(BENCH_MULTIPLIER、setarch -R、关闭超线程等),以及如何在当前仓库中用admin/bench-measure.mk和rustls-bench复现同类测量。

基准概述

本次基准是 rustls 性能报告系列的延续(此前报告见 2024-10-18-report.md、2024-10-31-arm64.md、2025-07-31-report.md,总览见 website/content/perf/_index.md)。报告覆盖三类指标:

  • 传输吞吐(transfer):单位为 MB/s,覆盖 TLS 1.2 AES-128-GCM 与 TLS 1.3 AES-256-GCM 的发送与接收方向;
  • 完整握手(full handshake):单位为 handshakes/s,覆盖 TLS 1.2 / 1.3 × RSA / ECDSA × 客户端 / 服务端共 8 个场景;
  • 恢复握手(resumed handshake):单位为 handshakes/s,覆盖 TLS 1.2 / 1.3 的客户端与服务端。

被测三方均构建为最接近生产形态的版本:rustls 0.23.37(搭配 aws-lc-rs 1.16.0 / aws-lc-sys 0.37.1)、OpenSSL 3.6.1(当时最新发布版)、BoringSSL 30cd935(当时 main 分支最新点)。

系统配置与版本

测试机环境

基准运行在一台裸金属服务器上(报告原文):

  • 操作系统:Debian 12(Bookworm);
  • C/C++ 工具链:GCC 12.2.0、Clang 14.0.6;
  • Rust 工具链:1.94.0;
  • CPU:Xeon E-2386G(支持 AVX-512),内存 32GB;
  • 附加配置:关闭超线程(hyper-threading disabled)、关闭动态频率缩放(dynamic frequency scaling disabled)、所有核心的 CPU scaling governor 设为performance。

这些限制条件与 BENCHMARKING.md 中"降低噪声"的建议一致:关闭超线程与频率缩放、设置性能调速器、关闭 ASLR(setarch -R)、用BENCH_MULTIPLIER延长测试时长以中和冷 CPU/页缓存效应。

被测版本与构建方式

OpenSSL 与 BoringSSL 统一使用 openssl-bench 82b86b22 作为基准工具,按其 makefile 从源码构建。

BoringSSL 30cd935:从源码构建,命令为

CC=clang CXX=clang++ cmake -DCMAKE_BUILD_TYPE=Release

OpenSSL 3.6.1:从源码构建,命令为

./Configure ; make -j12

rustls 0.23.37:报告发布时最新的稳定版,搭配 aws-lc-rs 1.16.0 / aws-lc-sys 0.37.1 加密提供方。注意,当前仓库的 rustls/Cargo.toml 中版本为0.24.0-dev.1,即仓库主干已处于 0.24 开发阶段,0.23.37 是这套数据对应的稳定发布版本。

测量方法与命令

三方的测量命令完全同构,均通过BENCH_MULTIPLIER=16将每个场景的工作量放大 16 倍,并用setarch -R关闭 ASLR:

# BoringSSL(在 ~/bench/openssl-bench 目录下) BENCH_MULTIPLIER=16 setarch -R make measure BORINGSSL=1 # OpenSSL(在 ~/bench/openssl-bench 目录下) BENCH_MULTIPLIER=16 setarch -R make measure # rustls(在 ~/bench/rustls 目录下) BENCH_MULTIPLIER=16 setarch -R make -f admin/bench-measure.mk measure

rustls 侧的 makefile 即仓库中的 admin/bench-measure.mk。它的measure目标实际执行cargo build --profile=bench -p rustls-bench --features aws-lc-rs(PROVIDER:=aws-lc-rs),然后对./target/release/rustls-bench依次调用:

  • bulkTLS 1.2 AES-128-GCM、AES-256-GCM、CHACHA20-POLY1305 及 TLS 1.3 AES-256-GCM;
  • handshake/handshake-resume/handshake-ticket覆盖 TLS 1.2 与 1.3 的完整握手、有状态恢复(Session ID)与无状态恢复(Ticket)。

rustls-bench的命令行参数定义在 rustls-bench/src/main.rs:bulk子命令支持plaintext_size(默认 1MB)与max_fragment_size;handshake-resume对应 Session ID 恢复、handshake-ticket对应无状态票据恢复;全局参数还包括--threads、--api buffered|unbuffered、--key-type、--provider,以及BENCH_MULTIPLIER/BENCH_LATENCY两个环境变量。基准场景的类型定义可在 ci-bench/src/benchmark.rs 中看到:BenchmarkKind::{Handshake, Transfer}与ResumptionKind::{No, SessionId, Tickets}。

结果数据

以下数据全部摘自 2026-03-07-report.md 的结果表,未作任何改动。传输为 MB/s,握手为 handshakes/s。

传输吞吐(transfer,MB/s)

| 场景 | 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 |

完整握手(full handshakes,handshakes/s)

| 场景 | 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 |

恢复握手(resumed handshakes,handshakes/s)

| 场景 | 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 |

数据解读

结合表中数据(报告本身未附观察小节),可以做如下客观归纳:

  • 恢复握手是 rustls 优势最明显的场景:TLS 1.2 服务端恢复握手达到 72,480.52 hs/s,约为 BoringSSL(44,429)的 1.63 倍、OpenSSL(22,647.1)的 3.2 倍;TLS 1.2 客户端同样领先(63,870.34 vs 45,390.3 / 21,136.9)。这与 rustls 在 TLS 扩展表示上的优化有关——2025-07-31-report.md 曾指出,TLS 扩展内部表示的优化在 TLS 1.2 场景中效果最明显,因为该路径上没有加密运算的变化掩盖开销。
  • 完整握手中 rustls 全面领先:8 个场景中 rustls 均居第一,其中 TLS 1.3 ECDSA 服务端 6786.26 hs/s,比 BoringSSL(4981.38)快约 36%,比 OpenSSL(3176.58)快约 1.14 倍;TLS 1.3 RSA 服务端 2357.36 hs/s,同样显著高于 BoringSSL(1302.03)与 OpenSSL(1712.64)。
  • 传输吞吐三方接近、各有胜负:TLS 1.3 AES-256-GCM 发送方向上 BoringSSL(7564.71 MB/s)与 rustls(7421.02 MB/s)接近,均明显高于 OpenSSL(5844.35 MB/s);接收方向上 rustls 最高(7332.91 MB/s)。TLS 1.2 AES-128-GCM 发送方向 BoringSSL 领先(8291.9 vs 8133.85),接收方向 rustls 领先(7946.96 vs 7129.43 / 6722.26)。这说明在同样依赖底层密码库(aws-lc 与 BoringSSL 同源)的纯数据面,差距更多来自底层 AES-GCM 的 SIMD 实现而非 TLS 协议栈本身。
  • TLS 1.3 恢复握手明显慢于 TLS 1.2:这一点与 2024-10-18-report.md 的观察一致——TLS 1.3 恢复包含一次全新的密钥交换,因此成本高于 TLS 1.2 的纯会话恢复。
  • 服务端与客户端方向差异:RSA 完整握手场景下服务端吞吐远低于客户端(如 TLS 1.3 RSA server 三方均低于对应 client 数值),因为服务端需要执行私钥签名;而 ECDSA 场景服务端反而更高,与各库对 ECDSA 验证/签名路径的实现差异有关。

需要强调的是,本次对比基于单台 x86_64 裸金属服务器(Xeon E-2386G,支持 AVX-512),CPU governor、超线程与 ASLR 均已做噪声抑制;不同硬件(如 2024-10-31-arm64.md 的 Ampere Altra)上结论可能不同。

复现与扩展

如果你希望在本地复现或扩展这套测量,仓库提供了完整工具链:

  1. 构建 rustls 基准二进制:cargo build --profile=bench -p rustls-bench --features aws-lc-rs(见 BENCHMARKING.md,--profile=bench比--release性能更好;可用--no-default-features/--features切换提供方,例如ring或graviola)。
  2. 一键测量:在仓库根目录执行make -f admin/bench-measure.mk measure,即按 admin/bench-measure.mk 中预置的套件组合跑完 bulk、完整握手、Session ID 恢复与 Ticket 恢复。
  3. 定向测量:直接调用rustls-bench,例如./target/release/rustls-bench handshake TLS13_AES_256_GCM_SHA384;用./target/release/rustls-bench list-suites查看当前 provider 支持的套件。
  4. 内存与线程指标:makefile 还提供make memory(不同并发连接数下的内存占用)、threads与thread-latency(多线程吞吐与逐次握手延迟,输出*-latency.tsv)。
  5. 降噪规范:对照 BENCHMARKING.md 的"Reducing noise"清单——BENCH_MULTIPLIER放大工作量、setarch -R关闭 ASLR、关闭动态频率缩放与超线程、设置 performance governor,并多次运行取中位数。
  6. 跨平台对照:参考 ARM64 报告 2024-10-31-arm64.md 中的方法——当 rustls 在吞吐上小幅落后时,可分别用 BoringSSL/aws-lc/OpenSSL 自带的bssl speed类工具验证底层密码实现本身差异极小,从而将差异定位到协议栈层。

结论

本次 x86_64 基准表明:在相同的降噪环境下,rustls 0.23.37(aws-lc-rs 后端)在完整握手与恢复握手场景中领先 OpenSSL 3.6.1 与 BoringSSL 30cd935,其中 TLS 1.2 恢复握手优势最突出;传输吞吐方面三方接近,发送方向 BoringSSL 与 rustls 领先、接收方向 rustls 领先。所有原始数据与测量命令均可从 website/content/perf/2026-03-07-report.md 复现,仓库内配套的rustls-bench与 makefile 让你可以在自己的硬件上重跑这套对比。

  • 网络安全
  • 密码学
  • 网络

【免费下载链接】rustls

A modern TLS library in Rust

项目地址:https://gitcode.com/gh_mirrors/ru/rustls
点击查看免费下载

相关推荐

上一篇:Navicat Premium Mac版无限试用期重置终极指南:技术原理与实战应用
下一篇:如何快速上手阿里云OSS Browser:免费桌面管理神器完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询