SPECjvm2008 Benchmark - openjdk-riscv/jdk11u GitHub Wiki

使用SPECjvm2008进行基准测试

什么是SPECjvm2008
  • Java虚拟机基准测试,其重点是执行单个应用程序的JRE的性能。
  • 反映了硬件处理器和内存子系统的性能,但对文件I/O的依赖性较低。
  • 利用现实生活中的应用程序和以区域为中心的基准测试。
包含的CASE
  • startup.helloworld
  • startup.compiler.compiler
  • startup.compiler.sunflow
  • startup.compress
  • startup.crypto.aes
  • startup.crypto.rsa
  • startup.crypto.signverify
  • startup.mpegaudio
  • startup.scimark.fft
  • startup.scimark.lu
  • startup.scimark.monte_carlo
  • startup.scimark.sor
  • startup.scimark.sparse
  • startup.serial
  • startup.sunflow
  • startup.xml.transform
  • startup.xml.validation
  • compiler.compiler
  • compiler.sunflow
  • compress
  • crypto.aes
  • crypto.rsa
  • crypto.signverify
  • derby
  • mpegaudio
  • scimark.fft.large
  • scimark.lu.large
  • scimark.sor.large
  • scimark.sparse.large
  • scimark.fft.small
  • scimark.lu.small
  • scimark.sor.small
  • scimark.sparse.small
  • scimark.monte_carlo
  • serial
  • sunflow
  • xml.transform
  • xml.validation

下载及安装SPECjvm2008

下载地址

https://www.spec.org/jvm2008/

安装JDK

安装SPECjvm2008前需要安装本机架构版本的JDK,可以使用apt来进行安装

$ sudo apt install openjdk-11-jdk 

或者使用之前交叉编译时使用的bootjdk

$ export PATH=/path/to/jdk-10/bin:$PATH
安装SPECjvm2008
$ java -jar SPECjvm2008_1_01_setup.jar -i console
# 输入安装界面提示的语言或直接回车默认选择英语,之后按提示输入回车以及Y
# 看到'ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT'提示后输入安装目录的绝对路径
$ /path/to/SPECjvm2008
# 之后按提示输入回车以及Y,显示'Congratulations. SPECjvm2008 has been successfully installed to: xxx'后表示安装成功,输入回车退出安装程序

运行SPECjvm2008的benchmark

如果要使用QEMU用户模式来对构建的RISCV32 JDK进行测试,需要使用脚本包裹相关的二进制文件,请参考 Run-or-debug-with-QEMU-user-mode

方法一 执行自带脚本(不推荐)

首先需要配置环境

$ export JAVA_HOME=/path/to/jdk
$ export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/lib.dt.jar
$ export PATH=$PATH:$JAVA_HOME/bin

配置好以上的环境变量后在SPECjvm2008目录下执行:

$ cd SPECjvm2008
$ run-specjvm.sh

不带参数运行脚本默认会运行所有case,如果想要测试单个case,需要在后面加上参数:

$ run-specjvm.sh startup.helloworld

这种方法需要配置相关变量并且不能灵活使用JVM或者其本身所支持的参数,除此之外对于交叉编译的JDK可能出现各种问题,所以我们通常选择第二种方法。

方法二 直接执行安装目录下的jar包(推荐使用)

由于SPECjvm2008所内置的编译器版本较低,在运行某些case时可能会出现假死问题,例如:

警告:spec.benchmarks.compiler.SpecFileManager$CachedFileObject@4fb64261: 主版本 52 比 51 新,此编译器支持最新的主版本。
建议升级此编译器。

或者提示javac版本检查失败:

The javac version test in check failed

所以我们通常在进行验证测试,而不是要提交结果的时候可以添加一下三个参数,以保证测试的顺利进行:

Arg Long arg Property name Description
-coe --continueOnError specjvm.continue.on.error Continue to run suite, even if one test fails.
-ict --ignoreCheckTest specjvm.run.initial.check Do not run check benchmark.
-ikv --ignoreKitValidation specjvm.run.checksum.validation Do not run checksum validition of benchmark kit.

测试单个case:

$ /path/to/jdk/java -jar SPECjvm2008.jar -ikv -ict -coe startup.helloworld

执行完整的测试并记录日志,例:

$ /path/to/jdk/java -jar SPECjvm2008.jar -ikv -ict -coe > SPECjvm2008.log 2>&1 

其他常用可选参数

  • -i/--iterations 表示要运行多少次迭代,“ inf”表示无穷大。

  • -it/--iterationtime 表示一次迭代应该多长时间。时间指定为整数,并假定为以秒为单位,或者以单位为单位的整数。

  • -wt/--warmuptime 表示预热时间多长。时间格式与迭代时间相同。

  • -ops/--operations 表示每次迭代将包含多少个操作。这将是固定的工作量,并且迭代时间将被忽略。

测试结果分析

测试期间

测试开始后会在终端不断打印测试的运行过程:

--- --- --- --- --- --- --- --- ---

  Benchmark:   derby
  Run mode:    timed run
  Test type:   multi
  Threads:     8
  Warmup:      120s
  Iterations:  1
  Run length:  240s

Warmup (120s) begins: Wed Mar 10 08:58:13 UTC 2021
Warmup (120s) ends:   Wed Mar 10 09:00:15 UTC 2021
Warmup (120s) result: 769.30 ops/m

Iteration 1 (240s) begins: Wed Mar 10 09:00:15 UTC 2021
Iteration 1 (240s) ends:   Wed Mar 10 09:04:15 UTC 2021
Iteration 1 (240s) result: 788.65 ops/m

Valid run!
Score on derby: 788.65 ops/m

最后的 Valid run! 表示测试通过,Score on xxx 后为跑分结果,数字越大表示性能越好。

测试结束

测试运行完成后会在SPECjvm2008/results目录下生成SPECjvm2008.<num>(为自增序列)的目录,即为测试结果。

目录下包含以下内容:

  • images
  • SPECjvm2008.<num>.raw
  • SPECjvm2008.<num>.html
  • SPECjvm2008.<num>.txt
  • SPECjvm2008.<num>.sub
  • SPECjvm2008.<num>.summary
手动生成测试结果

如果某些终端软件不支持X11或因为缺少图形相关软件包而导致在SPECjvm2008.<num>目录下只生成有效的SPECjvm2008.<num>.raw文件,可以在其他主机或者其他终端中手动生成html等图形化测试结果,只需要在运行java -jar SPECjvm2008.jar时后加--reporter <file name>,其中file name要指定为SPECjvm2008.<num>.raw文件。

进入到SPECjvm2008并执行:

$ java -jar SPECjvm2008.jar --reporter ./results/SPECjvm2008.<num>/SPECjvm2008.<num>.raw

即可在SPECjvm2008.<num>.raw同级目录下生成相关图形化测试结果。

⚠️ **GitHub.com Fallback** ⚠️