Raspberry PI 2上使用OpenSSL AES/GCM的性能非常差

Mat*_*nti 8 benchmarking openssl aes raspberry-pi

我开发了一个简单的C++程序来测试OpenSSL AES/GCM调用到EVP接口的性能.它的作用是取一个1024字节的字符串,用密钥加密它,然后用相同的密钥加密结果,并一次又一次地加密.我正在使用增量4字节初始化向量.

当我在我的Macbook Pro(Intel i7)上测试它时,结果非常令人印象深刻:在一个内核上运行上述过程的1048576次迭代需要一秒钟.这是1 GB/s的加密速度.如果我们同时使用所有核心,则为8 GB/s(或多或少).

现在,我在Raspberry PI 2上移植了相同的基准测试.然而,当我运行它时,需要0.16秒来完成1024次迭代.在单核上,这或多或少为6 MB/s.

现在,我很明白,现代昂贵的i7处理器和在Raspberry上运行的小型ARM处理器之间存在着巨大的巨大差异,但仍然快170倍.因此,在假设Raspberry PI 2 真的那么糟糕之前,我想检查这些参数是否合理.

有没有人做过某种基准呢?Raspberry上6 MB/s的加密速度是否合理?或者我做错了什么?

(我通过我的Macbook USB给它供电:可能这么慢,因为它没有获得足够的功率?这听起来听起来不合理.它根本不会启动,对吧?或者可能有一个超频机制来省电吗?)

更新1:我openssl -evp speed aes-256-cbc在我的Macbook和Raspberry上做了.

在Macbook上:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc     534591.95k   564057.62k   566522.81k   570717.87k   574876.33k
Run Code Online (Sandbox Code Playgroud)

在覆盆子上:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      14288.53k    16653.74k    17165.31k    17298.43k    17337.00k
Run Code Online (Sandbox Code Playgroud)

这仍然是因素33,但英特尔处理器可以使用硬件加速AES调用.不过,据我所知,GCM模式应该比CBC快得多.我不知道为什么但看起来没有一个用于GCM的openssl基准权利,但即使假设它们的表现相同,我也错过了一个因素3.

更新2检查此页面:http://elinux.org/RPi_Performance#OpenSSL.看起来我缺少10 MB/s以上.总计:使用AES/CBC(应该是)为27 MB/s,使用AES/GCM为6 MB/s(实际上是这样).

Jos*_*sef 5

您的Intel CPU使用AESNI扩展提供专用硬件支持.如果你在没有它的情况下进行编译,你将获得大约250MB/s的性能差异听起来合理.(并且任何CPU有多少GHz都没有告诉你性能,除非它只是使用不同的时钟完全相同的CPU类型)


And*_*her 0

如果您还没有考虑到这一点,为什么 3 的系数不能用大约 3 倍的处理能力差异来解释呢?

Raspberry Pi 2 具有 900Mhz 处理器,典型的 i7 处理器具有 2.8Ghz,这使得 Raspberry Pi 具有大约三分之一的处理能力。

另外,我不知道您从哪里得出这样的结论:在这种情况下 GCM 应该比 CBC 更快。CBC 不提供身份验证,因此仅此一项就会使 GCM 明显变慢(尽管可能不是您看到的 4 倍)。

当然,当您引入多个核心时,这种情况就会消失,因为 CBC 无法并行化,而 GCM 可以。

  • 由于现代 CPU 试图同时执行尽可能多的操作,因此您无法立即将时钟速度与相对性能关联起来。这就是为什么 CPU 速度更快,同时保持大致相同的时钟速度。据我了解,Rasåberry ARM cpu 并不能完成所有这些技巧。 (3认同)