【问题标题】:"openssl speed rsa" less performant on (normally) better cpu“openssl speed rsa”在(通常)更好的 cpu 上性能较低
【发布时间】:2019-06-19 13:41:20
【问题描述】:

我试图弄清楚为什么“openssl speed rsa”在更好的 cpu 上给我带来更差的结果

第一台服务器:Linux Debian 8(运行 Xen)-内核:4.9.0-amd64

model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz cpu MHz : 2200.004 cache size : 30720 KB flags : fpu de tsc msr pae mce cx8 apic sep mca cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 hle avx2 bmi2 erms rtm rdseed adx xsaveopt ibpb ibrs stibp bogomips : 4400.00

第二台服务器:Linux Debian 8(运行 Vmware ESXi(我还不知道是哪一个)-内核:4.9.0-amd64)

model name : Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz cpu MHz : 2199.058 cache size : 51200 KB flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm kaiser arat bogomips : 4399.99 运行“openssl speed rsa”给了我这个(只粘贴 4096 位,因为它与我想做的唯一相关):

第一台服务器:

Doing 4096 bits private rsa's for 10s: **1699** 4096 bits private RSA's in 10.00s Doing 4096 bits public rsa's for 10s: 105493 4096 bits public RSA's in 10.00s

第二台服务器:

Doing 4096 bits private rsa's for 10s: **1229** 4096 bits private RSA's in 10.00s Doing 4096 bits public rsa's for 10s: 78677 4096 bits public RSA's in 10.00s

什么可以解释创建的键的差异 (=470 (1699-1229)) ?

两台服务器的 cpu 都带有 aes 标志。

我看到的唯一区别是可用的引擎,第一台服务器有 “(rdrand)英特尔 RDRAND 引擎”,另一个不是。

有什么想法吗?

【问题讨论】:

    标签: performance openssl debian vmware xen


    【解决方案1】:

    编辑:

    正如@Alexei Khlebnikov 所说,openssl speed rsa 命令仅测量 rsa 签名/验证函数的速度,并且这些函数不使用随机数。因此,我的原始答案没有回答问题。

    经过快速搜索,我发现第一台服务器有 bmi2 和 adx 指令,而第二台服务器没有。这些指令用于提高性能 Montgomery 的整数乘法/平方,用于 RSA 签名操作。很难确认这是造成性能差异的原因,但这可能是原因之一。

    原答案:

    要生成 RSA 密钥,您需要随机的大质数。找到一个随机的大素数的过程包括:

    1. 生成一个随机数;
    2. 检查它是否是素数;
    3. 如果不是,请重复。

    如你所见,这涉及到大量的 RNG,生成好的 RNG 真的很慢。因此,拥有更快的 RNG 意味着更快的 RSA 密钥生成。

    【讨论】:

    • 确实有很大的不同。我已经使用 Proxmox VM 进行了测试,我清楚地看到了区别:没有:`在 10 秒内执行 4096 位私有 RSA:在 9.99 秒内执行 1864 4096 位私有 RSA 在 10 秒内执行 4096 位公共 RSA:在 9.98 秒内执行 120240 4096 位公共 RSA `与:`在 10 秒内执行 4096 位私有 RSA:在 9.99 秒内执行 2925 4096 位私有 RSA 在 10 秒内执行 4096 位公共 RSA:在 9.99 秒内执行 187866 4096 位公共 RSA ` 感谢您的帮助!
    • @CasimirEX 如果您认为我回答了您的问题,请考虑将我的回答标记为已接受。如果你不知道怎么做:stackoverflow.com/help/someone-answers
    • 我认为,答案并没有回答问题。 openssl speed rsa 命令测量不使用 RNG 的签名和验证操作,而不是使用 RNG 的密钥生成操作。
    • 你是对的。我把注意力集中在问题“什么可以解释创建的密钥的区别 (=470 (1699-1229))?”的结尾,但是“创建的密钥”是对“openssl speed rsa”命令输出的错误解释。我检查了 openssl 速度源代码,以验证它是否在基准测试期间使用了任何 rand 操作(例如 pss 填充),但看起来并非如此。
    • 看起来bmi2和adx处理器指令可以提高rsa操作的性能,而且这些指令只能在性能更高的第一台硬件(第一台服务器)中找到。
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多