"openssl speed rsa" 性能较差(通常)较好 cpu
"openssl speed rsa" less performant on (normally) better cpu
我想弄明白为什么 "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
运行 a "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) Intel RDRAND engine" 而另一个不是。
有什么想法吗?
编辑:
如@Alexei Khlebnikov 所述,openssl speed rsa
命令仅测量 rsa sign/verify 函数的速度,这些函数不使用随机数。因此,我的原始答案没有回答问题。
经过快速搜索,我发现第一个服务器有bmi2和adx指令,而第二个服务器没有。这些指令用于提高性能
用于 RSA 签名操作的蒙哥马利整数 multiplication/squaring。很难确定这是性能差异的原因,但这可能是原因之一。
原回答:
要生成 RSA 密钥,您需要随机的大素数。寻找随机大素数的过程包括:
- 生成一个随机数;
- 检查它是否是质数;
- 如果不是,请重复。
如您所见,这涉及到很多RNG,生成好的RNG真的很慢。因此,拥有更快的 RNG 意味着更快的 RSA 密钥生成。
我想弄明白为什么 "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
运行 a "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) Intel RDRAND engine" 而另一个不是。
有什么想法吗?
编辑:
如@Alexei Khlebnikov 所述,openssl speed rsa
命令仅测量 rsa sign/verify 函数的速度,这些函数不使用随机数。因此,我的原始答案没有回答问题。
经过快速搜索,我发现第一个服务器有bmi2和adx指令,而第二个服务器没有。这些指令用于提高性能 用于 RSA 签名操作的蒙哥马利整数 multiplication/squaring。很难确定这是性能差异的原因,但这可能是原因之一。
原回答:
要生成 RSA 密钥,您需要随机的大素数。寻找随机大素数的过程包括:
- 生成一个随机数;
- 检查它是否是质数;
- 如果不是,请重复。
如您所见,这涉及到很多RNG,生成好的RNG真的很慢。因此,拥有更快的 RNG 意味着更快的 RSA 密钥生成。