Encryption 使用“基准”进行基准测试;“openssl速度”;在甲板上

Encryption 使用“基准”进行基准测试;“openssl速度”;在甲板上,encryption,openssl,cryptography,benchmarking,execution-time,Encryption,Openssl,Cryptography,Benchmarking,Execution Time,我试图使用openssl在ZedBoard上对AES和RSA进行基准测试,并计算加密或解密一个数据块所需的时间。。我能够使用openssl speed命令获得结果。然而,我对一些输出结果感到困惑,我希望在这方面有经验的人能提供一些启示 例如,在下面的openssl speed-appeased-evp aes-128-cbc命令的输出中: # openssl speed -elapsed -evp aes-128-cbc You have chosen to measure elapsed ti

我试图使用openssl在ZedBoard上对AES和RSA进行基准测试,并计算加密或解密一个数据块所需的时间。。我能够使用openssl speed命令获得结果。然而,我对一些输出结果感到困惑,我希望在这方面有经验的人能提供一些启示

例如,在下面的
openssl speed-appeased-evp aes-128-cbc
命令的输出中:

# openssl speed -elapsed -evp aes-128-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-128-cbc for 3s on 16 size blocks: 3721379 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 1035700 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 268675 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 67840 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 8523 aes-128-cbc's in 3.00s
OpenSSL 1.0.2j  26 Sep 2016
built on: reproducible build, date unspecified
options:bn(64,32) rc4(ptr,char) des(idx,cisc,16,long) aes(partial) idea(int) bl
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-cbc      19847.35k    22094.93k    22926.93k    23156.05k    23273.47k
在吞吐量结果的最后一行中,我了解到对于16字节的块大小,在CBC模式下运行AES-128 1秒将处理19.85 MB的数据。加密一个数据块需要0.806μs,这样说对吗?((16/19.85)*10^-6秒)


其次,当使用openssl speed命令测试RSA速度时,它是否使用任何专用硬件(例如ZedBoard中的HSM,用于对启动映像的分区进行签名并生成RSA密钥)?或者,是否有办法检查在速度测试期间是否正在使用此硬件模块?另外,RSA的speed输出没有提到签名输入消息的大小。是否根据标准的键大小进行计算?maxInputSize_inBytes对于如此短的操作,倒数吞吐量不一定等于延迟。
3.0秒/3721379=0.806 us
是I-cache中加密功能处于热态且分支预测器已启动的平均时间。如果您只是偶尔作为较大程序的一部分调用该函数,它可能会较慢

IDK,如果任何ZedBoard模型具有无序执行CPU,但即使如此,对于低功耗设备,无序窗口和内存重新排序缓冲区的大小也相当有限。(英特尔Skylake的重排序缓冲区为224 uops,但低功耗内核的无序窗口可能只有20到40条指令。)

无论如何,0.8us可能是对为16字节块调用此函数对周围代码的影响的合理估计,以便将工作导入管道

我可能在延迟和吞吐量方面做得太大了。对于1GHz的CPU来说,800纳秒就是800个时钟周期,所以大部分工作可能无法与周围的代码重叠,这确实是一项成本,你可以将其与其他成本相加。但一般来说,在小范围内,这不是流水线CPU的性能工作方式,特别是OoO CPU


对不起,我不知道关于你的硬件的任何具体情况,所以我不能对问题的其他两部分发表评论


解决问题其余部分所需的其他答案,这只是第一部分的一般答案。

对于如此短的操作,反向吞吐量不一定等于延迟。
3.0秒/3721379=0.806 us
是I-cache中加密功能处于热态且分支预测器已启动的平均时间。如果您只是偶尔作为较大程序的一部分调用该函数,它可能会较慢

IDK,如果任何ZedBoard模型具有无序执行CPU,但即使如此,对于低功耗设备,无序窗口和内存重新排序缓冲区的大小也相当有限。(英特尔Skylake的重排序缓冲区为224 uops,但低功耗内核的无序窗口可能只有20到40条指令。)

无论如何,0.8us可能是对为16字节块调用此函数对周围代码的影响的合理估计,以便将工作导入管道

我可能在延迟和吞吐量方面做得太大了。对于1GHz的CPU来说,800纳秒就是800个时钟周期,所以大部分工作可能无法与周围的代码重叠,这确实是一项成本,你可以将其与其他成本相加。但一般来说,在小范围内,这不是流水线CPU的性能工作方式,特别是OoO CPU


对不起,我不知道关于你的硬件的任何具体情况,所以我不能对问题的其他两部分发表评论

解决问题其余部分所需的其他答案,这只是第一部分的一般答案。