openssl speed 怎么公平比较不同算法的吞吐量
openssl speed 怎么公平比较不同算法的吞吐量
公平比较的关键是固定算法类别、调用路径、数据块大小、计时方式和并行度,再比较同一列。以 SHA-256 和 SHA-512 为例,可以统一使用 EVP 摘要接口、16384 字节缓冲区、5 秒窗口和墙钟计时。得到的是当前机器上该实现处理数据的速度,不能据此认定哪个算法更安全,也不能直接当作业务接口吞吐量。
官方地址:https://docs.openssl.org/3.5/man1/openssl-speed/
本文以 OpenSSL 3.5 的命令语义说明方法,示例没有实际运行,不提供虚构的性能数字。其他版本应按其对应手册选择可用选项。
先准备一份同类算法测试配方
先确认版本和可用摘要,然后只测目标算法。不要直接运行不带算法参数的整套测试,再从不同类型的结果中挑一个最大数。
# 记录构建信息,并确认本机提供的摘要算法 openssl version -a openssl list -digest-algorithms # 两条命令使用相同接口、数据块、窗口和计时方式,串行运行 openssl speed -elapsed -seconds 5 -bytes 16384 -evp sha256 openssl speed -elapsed -seconds 5 -bytes 16384 -evp sha512
-evp 让摘要或密码算法通过 EVP 路径接受测试;这里选择两个摘要,便于比较相同任务。不要把摘要的字节吞吐量、公钥签名次数和密钥协商次数放进同一张排名表。命令支持某个名字,只说明当前配置存在相应实现。
把环境条件写成配料表
算法名字相同,实际实现仍可能受到版本、构建、provider、属性查询以及硬件优化路径影响。对照测试需要使用同一个 OpenSSL 可执行文件,并保持配置、CPU 资源和后台负载尽量一致。如果机器处于共享环境,结果应标记为该环境下的测量,不能包装成硬件的固定能力。
| 条件 | 本例约定 | 改变后的影响 |
|---|---|---|
| 算法任务 | EVP 摘要 | 换成签名后计量对象不同 |
| 缓冲区长度 | 16384 字节 | 小块调用开销与大块处理占比不同 |
| 计时 | elapsed,5 秒窗口 | CPU 时间与墙钟时间的分母不同 |
| 并行方式 | 不传 -multi | 多进程结果包含更多并行资源 |
| 实现配置 | 同版本、同 provider 条件 | 可能切换到不同实现 |

若使用了 -provider、-provider-path、-propquery 或 -config,应在全部对照命令中采用相同设置,并记录完整命令。不要为一条命令加载额外 provider,却把另一条命令的默认实现结果并入同组。异步作业和缓冲区对齐设置也属于应固定的条件。
计时窗口与数据块分别控制什么
-seconds 5 指定基准测试的时间窗口;当命令涉及多个测试用例时,不应理解为整条命令总共只运行 5 秒。-bytes 16384 指定密码、摘要或随机数相关测试使用的缓冲区大小,并不是让程序总共只处理 16384 字节,也不适用于把 RSA 操作变成该长度的字节吞吐量。
-elapsed 使用墙钟时间,而不是 CPU 用户时间作为除数。在受调度影响的机器上,这两种分母可能得出不同读数。它让本例的口径明确,但并不能消除机器争用、降频或后台活动。因此要固定计时方式,并保留环境备注。
-multi 会并行执行操作。若需要研究多进程整体处理能力,可另建一组固定进程数的测试;不要把它和本例无该选项的结果混用。对于 AEAD 密码,-aead 使用类似 TLS 的记录操作序列,其结果也不能随意并入普通 EVP 密码测试,更不代表 TLS 握手速度。
读结果时先确认列,再换算单位
摘要与对称密码结果关注处理的字节数和时间。默认结果可能含多个缓冲区长度列,应按相同长度对照;本例通过 -bytes 明确指定长度。不同列的最大值不能当作同一条件的算法胜负。
OpenSSL 3.5 的输出源码会对较大的普通吞吐读数除以 1000 并加 k 后缀;这里的 k 是十进制千倍,不能当作 bit/s 或二进制 KiB/s。换算前要结合输出模式和后缀,而不是只凭表头把每一个裸数字都再乘 1000。公钥测试中的 sign/s、verify/s 则属于每秒操作次数,不能套用字节单位。

-mr 是机器可读输出选项,并非 JSON 或 CSV。3.5 源码中摘要和密码吞吐字段按未附加 k 后缀的每秒字节数输出;采集时应按对应版本的记录格式解析,保留缓冲区长度与算法关联,不要照搬普通文本显示时的单位处理逻辑。
重复几轮,保存波动而不是只选最好一轮
第一轮和后续轮次可能因环境变化而不同。下面以三轮、两种块大小记录原始输出,奇偶轮交换算法顺序,减少固定先后顺序带来的偏差。它不是消除全部噪声的统计保证;如果三轮差异明显,应增加轮次并先排查负载条件。
# 建立独立记录目录;所有算法串行执行,避免互相争用
mkdir -p speed-results
openssl version -a > speed-results/version.txt
for round in 1 2 3; do
# 交换先后顺序,并保留每一种块大小的单独结果
if [ "$round" -eq 2 ]; then
algorithms="sha512 sha256"
else
algorithms="sha256 sha512"
fi
for size in 1024 16384; do
for algo in $algorithms; do
# 标准输出和错误输出一起保存,失败时停止,不能把失败算成零吞吐
openssl speed -elapsed -seconds 5 -bytes "$size" -evp "$algo" \
> "speed-results/${round}-${size}-${algo}.txt" 2>&1 || exit 1
done
done
done
汇总时,每个块大小单独列出每轮值、统一单位后的中位数和范围,并注明版本、计时与并行设置。若发生不支持算法、加载失败等错误,应保存错误原因并处理环境问题,不应将失败项填为 0,或删除失败轮后声称数据稳定。
| 算法 | 缓冲区 | 每轮吞吐 | 汇总 |
|---|---|---|---|
| sha256 | 1024 字节 | 待实测填写 | 中位数及范围待填 |
| sha512 | 1024 字节 | 待实测填写 | 中位数及范围待填 |
| sha256 / sha512 | 16384 字节 | 分别记录 | 只在同长度内比较 |
几个容易混淆的问题
大块领先,小块落后,哪个算法更快?应分别报告对应块大小的结果,再选择贴近实际消息长度的口径。不能用大块数据替代大量小消息场景。
跑分更高就该替换业务算法吗?不能。测试没有覆盖协议约束、兼容性、数据结构与具体安全要求;本文只比较实现处理速度,不给出生产密钥或算法替换结论。
为什么本机结果和别人不同?先比较版本、provider、CPU、块长度、elapsed 与并行度。条件不同,数值不同不一定意味着哪一方测错。
可以直接当成接口 QPS 吗?不能。speed 测试的库内处理不包含业务请求、网络、存储和完整协议流程。保留“该机器、该实现、该块大小、该计时口径”的限定,结论才有可比性。
wg showconf 怎么导出正在运行的 WireGuard 配置
- 上一篇
- wg showconf 怎么导出正在运行的 WireGuard 配置
- 下一篇
- readelf 怎么从 DWARF 行号表找到源码位置映射
-
- 文章 · linux | 11分钟前 |
- install -T 和普通目录安装有什么区别
- 449浏览 收藏
-
- 文章 · linux | 13分钟前 |
- getent ahostsv4 和 ahostsv6 怎么分别确认地址解析结果
- 131浏览 收藏
-
- 文章 · linux | 20分钟前 | Linux · ELF readelf DWARF .debug_line 源码行号
- readelf 怎么从 DWARF 行号表找到源码位置映射
- 418浏览 收藏
-
- 文章 · linux | 23分钟前 |
- wg showconf 怎么导出正在运行的 WireGuard 配置
- 331浏览 收藏
-
- 文章 · linux | 23分钟前 |
- mount.cifs multiuser 和 cache 选项怎么配合使用
- 266浏览 收藏
-
- 文章 · linux | 26分钟前 |
- nfsstat -m 怎么查看 NFS 挂载实际使用的选项
- 292浏览 收藏
-
- 文章 · linux | 28分钟前 |
- tcpdump -D 怎么列出可用抓包接口并避免选错网卡
- 218浏览 收藏
-
- 文章 · linux | 30分钟前 |
- bpftrace profile 探针怎么按固定频率采样用户态堆栈
- 227浏览 收藏
-
- 文章 · linux | 30分钟前 |
- ip netns identify 怎么确认进程属于哪个网络命名空间
- 477浏览 收藏
-
- 文章 · linux | 35分钟前 | 部署 · Linux · systemd attach systemd unit portablectl portable service RootImage
- portablectl attach 怎么把服务镜像接入本机启动流程
- 452浏览 收藏
-
- 文章 · linux | 38分钟前 |
- machinectl import-tar 怎么把压缩容器镜像导入本机
- 385浏览 收藏
-
- 文章 · linux | 12小时前 | Linux timeout 防火墙规则 nftables sets flags timeout 临时封禁
- Linux nftables sets timeout怎样让临时规则自动过期
- 134浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 893次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 897次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 981次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 968次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 795次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览

