在ZedBoard上使用“ openssl速度”进行基准测试

时间:2018-07-07 08:44:23

标签: encryption openssl cryptography benchmarking execution-time

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

例如,在下面的openssl speed -elapsed -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的速度输出也没有提及用于签名的输入消息的大小。是否根据PCKS#1 v2.1标准基于密钥大小进行计算? maxInputSize_inBytes <=(keySize_inBits / 8)-11

最后,是否使用perf工具(通过计算时钟周期数并计算执行次数)对RSA实现进行性能分析与运行openssl速度测试相同?

我是这方面的初学者,如果我的问题太幼稚,我深表歉意。预先感谢!

1 个答案:

答案 0 :(得分:1)

互惠吞吐量不一定等于短操作的等待时间。 3.0 sec / 3721379 = 0.806 us是加密功能在I缓存中处于热状态且分支预测器已准备就绪的平均时间。如果您只是偶尔在较大的程序中调用该函数,则它可能会变慢。

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

无论如何,0.8 us可能是合理的估计,因为将一个16字节的块调用此函数以使工作进入管道会对周围的代码产生影响。

我可能在延迟和吞吐量方面做得太大了。对于1GHz CPU,800纳秒是800个时钟周期,因此,大多数工作可能不会与周围的代码重叠,这确实是一项成本,您可以将其与其他成本加在一起。但是总的来说,这不是性能在管道式CPU(特别是OoO CPU)上的工作原理。


对不起,我对您的硬件一无所知,因此无法对问题的其他两个部分进行评论。

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