我正在尝试评估CPU性能。我有一台Intel(R)Xeon(R)CPU E5-1650 v2 @ 3.50GHz并运行以下命令:openssl speed rsa -multi 12 2>&1 |tee openssl-log.txt
并得到以下输出:
sign verify sign/s verify/s
rsa 512 bits 0.000008s 0.000001s 118050.6 1200000.0
rsa 1024 bits 0.000038s 0.000002s 26098.7 451567.0
rsa 2048 bits 0.000239s 0.000007s 4183.6 135606.3
rsa 4096 bits 0.001713s 0.000028s 583.7 35778.4
有人可以帮我理解输出吗?列标记和验证意味着什么?文档似乎没有解释太多: https://www.openssl.org/docs/apps/speed.html
提前谢谢。
答案 0 :(得分:5)
速度测试的代码位于<openssl>/apps/speed.c
。
-multi
是并行多个基准测试的开关,而不是乘法(以消除所有混淆)。请参阅第1145行附近的评论:
#ifndef NO_FORK
BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
#endif
列标记和验证是什么意思?
签名并验证他们所说的话。他们使用不同的RSA模数对签名操作和验证操作进行计时。
Sign / s和Verify / s是Sign and Verify的反转。即,1 / 0.000008s =&gt;每秒125,000个标志。
以下是打印您正在查看的报告的代码。它从第2450行开始:
#ifndef OPENSSL_NO_RSA
j=1;
for (k=0; k<RSA_NUM; k++)
{
if (!rsa_doit[k]) continue;
if (j && !mr)
{
printf("%18ssign verify sign/s verify/s\n"," ");
j=0;
}
if(mr)
fprintf(stdout,"+F2:%u:%u:%f:%f\n",
k,rsa_bits[k],rsa_results[k][0],
rsa_results[k][1]);
else
fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
}
#endif
找到执行签名和验证的代码留给读者练习;)
拥有Intel(R)Xeon(R)CPU E5-1650 v2 @ 3.50GHz
只是自行车脱落,但如果您使用的是现代GCC,请确保config
与enable-ec_nistp_64_gcc_128
。使用ec_nistp_64_gcc_128
可以将某些操作(例如DH操作)加速2倍或4倍。
您需要__uint128_t
的现代GCC。 Configure
无法确定编译器是否支持__uint128_t
,因此会禁用ec_nistp_64_gcc_128
。