当前位置:首页 > 文章列表 > 文章 > linux > openssl speed 怎么公平比较不同算法的吞吐量

openssl speed 怎么公平比较不同算法的吞吐量

来源:17golang原创 2026-11-05 15:33:01 0浏览 收藏

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,或删除失败轮后声称数据稳定。

算法缓冲区每轮吞吐汇总
sha2561024 字节待实测填写中位数及范围待填
sha5121024 字节待实测填写中位数及范围待填
sha256 / sha51216384 字节分别记录只在同长度内比较

几个容易混淆的问题

大块领先,小块落后,哪个算法更快?应分别报告对应块大小的结果,再选择贴近实际消息长度的口径。不能用大块数据替代大量小消息场景。

跑分更高就该替换业务算法吗?不能。测试没有覆盖协议约束、兼容性、数据结构与具体安全要求;本文只比较实现处理速度,不给出生产密钥或算法替换结论。

为什么本机结果和别人不同?先比较版本、provider、CPU、块长度、elapsed 与并行度。条件不同,数值不同不一定意味着哪一方测错。

可以直接当成接口 QPS 吗?不能。speed 测试的库内处理不包含业务请求、网络、存储和完整协议流程。保留“该机器、该实现、该块大小、该计时口径”的限定,结论才有可比性。

参考:OpenSSL 3.5 speed 官方手册;OpenSSL 3.5 speed 输出实现。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
wg showconf 怎么导出正在运行的 WireGuard 配置wg showconf 怎么导出正在运行的 WireGuard 配置
上一篇
wg showconf 怎么导出正在运行的 WireGuard 配置
readelf 怎么从 DWARF 行号表找到源码位置映射
下一篇
readelf 怎么从 DWARF 行号表找到源码位置映射
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    893次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    897次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    981次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    968次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    795次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码