OpenSSL AES/GCM 在 Raspberry PI 2 上的性能极其糟糕

问题描述 投票:0回答:2

我开发了一个简单的 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 真的那么糟糕之前,我想检查一下这些参数是否合理。

有人对此做过某种基准测试吗? 6 MB/s 的加密速度在 Raspberry 上合理吗?还是我做错了什么?

(我通过 Macbook USB 为其供电:会不会因为没有接收到足够的电量而这么慢?这听起来绝对不合理。它根本无法开机,对吧?或者可能有降频机制吗?为了省电?)

更新 1:我在 Macbook 和 Raspberry 上都做了

openssl speed -evp aes-256-cbc

在 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

在覆盆子上:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      14288.53k    16653.74k    17165.31k    17298.43k    17337.00k

这仍然是 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(实际上是这样)。

openssl raspberry-pi aes benchmarking
2个回答
6
投票

您的 Intel CPU 有使用 AESNI 扩展的专用硬件支持。 如果不使用它进行编译,您将获得大约 250MB/s 这种性能差异听起来很合理。 (任何 CPU 有多少 GHz 都无法告诉您任何有关性能的信息,除非它是完全相同的 CPU 类型,只是时钟不同)


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.