Dan*_*ann 5 security encryption benchmarking openssl cryptography
对加密库进行基准测试有哪些好的测试?
我们应该使用哪个单位(时间,CPU周期...)来比较不同的加密库?
有没有工具,程序......?
任何想法,欢迎评论!
感谢您的投入!
什么是对加密库进行基准测试的好测试?
以下答案是在 Crypto++ 的背景下进行的。我现在不关心其他库,比如 OpenSSL、Botan、BouncyCastle 等。
Crypto++ 库有一个内置的基准测试套件。
我们应该使用哪个单位(时间、CPU 周期...)来比较不同的加密库?
您通常以每字节周期数来衡量性能。每字节周期数取决于 CPU 频率。另一个相关指标是以 MB/s 为单位的吞吐量。它还取决于 CPU 频率。
有没有什么工具、程序……?
git clone https://github.com/weidai11/cryptopp.git
cd cryptopp
make static cryptest.exe
# 2.0 GHz (use KB=1024; not 1000)
make bench CRYPTOPP_CPU_SPEED=1.8626
Run Code Online (Sandbox Code Playgroud)
make bench将创建一个名为benchmark.html.
如果您想手动运行测试,那么:
./cryptest.exe b <time in seconds> <cpu speed in GHz>
Run Code Online (Sandbox Code Playgroud)
它将输出一个类似 HTML 的表格,不带<HEAD>和<BODY>标签。您仍然可以在网络浏览器中查看它。
您还可以在Crypto++ Benchmarks上查看 Crypto++ 基准测试页面。该信息已过时,并且在我们的待办事项列表中。
您还需要 Accen 来确保看起来正确。例如,SSE4.2和ARMv8有CRC32指令。每字节周期数应从大约 3 或 5 cpb(仅软件)变为大约 1 或 1.5 cpb(硬件加速)。它应该相当于在运行频率约为 2 GHz 的现代硬件上从大约 300 或 500 MB/s(仅软件)变为大约 1.5 GB/s(硬件加速)。
其他技术,如 SSE2 和 NEON,使用起来比较棘手。您应该看到理论上的每字节周期数和吞吐量,但您可能不知道它是什么。您可能需要联系该算法的作者才能找到答案。例如,我们联系了 BLAKE2 的作者,了解我们的 ARMv7/ARMv8 NEON 实现是否按预期执行,因为它缺少作者主页上的基准测试结果。
我还发现了 GCC 4.6(及更高版本),它-O3可以在纯软件实现中发挥很大作用。这是因为 GCC 在 处大量矢量化-O3,您可能会看到 2 倍到 2.5 倍的加速。例如,编译器可能会生成在 处以 40 cpb 运行的代码-O2。它-O3可能以 15 或 19 cpb 运行。良好的 SSE2 或 NEON 实现应该比纯软件实现的性能至少高出每个字节几个周期。在同一示例中,SSE2 或 NEON 实现可以以 8 到 13 cpb 运行。
还有像OpenBenchmarking.org这样的网站可能可以为您提供一些指标。
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |