基于ARMv8的JDK性能测试

Fuge12345 发表于 2019-8-9 17:01:09 | 显示全部楼层 |阅读模式 [复制链接]
0 1960
1.评测的目的
通过评测,掌握基于ARM64架构下,开源OpenJDK与商用Oracle JDK的各自性能特点,以及两者间性能差异,从而为JDK选择提供数据支撑,及后期JDK优化、自主研发提供良好参考。
2.设备相关信息2.1硬件设备信息
表2-1 测试所用硬件信息
  处理器
  
  ARM处理器鲲鹏920
  
  处理器数量
  
  8
  
  内存大小
  
  8192 MB(8GB)
  
  硬盘大小
  
  80 GB
  
  操作系统
  
  

Linux version 4.4.58-20180615.kylin.server.YUN+-generic  (YHKYLIN-OS@Kylin) (gcc version 7.2.0 (Debian 7.2.0-3) ) #kylin SMP Tue Jul  10 14:55:31 CST 2018

  
2.2软件信息(1)  OpenJDK
openjdk version "1.8.0_151"(即JDK8,最新为JDK9)
OpenJDK Runtime Environment (build1.8.0_151-8u151-b12-0kord0.16.04.2k1-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixedmode)

(2)  OracleJDK
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build25.221-b11, mixed mode)

(3)所用基准测试套件:SPECjvm2008
SPECjvm2008作为SPEC(Standard Performance EvaluationCorporation)的测试套件,包含较为全面的核心java功能测试,主要关注执行单个应用程序的JRE的性能;它还可以在执行JRE的上下文中测量操作系统和硬件的性能,是较为权威的测试套件。

图2-1 JDK、JRE、JVM间关系
    JRE包含了JVM、java核心类、和支持文件,不含编译器、调试器和其他工具,通过对JRE性能的测试,能够有效反应JDK的性能。
用例.pdf表2-2  SPECjvm2008测试用例列表:(单位 ops/m 每分钟操作数)
3.测试与结果
3.1背景知识:JVM类执行机制
JVM执行字节码有两种方式:解释模式(interpreter)和编译模式(jit)(JIT即时编译(Just In Time))。

图3-1  JVM 类执行机制
解释器将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。Sun公司为了解决解释器的执行慢的问题,引入了JIT技术。JIT针对一个具体的class进行编译,经过编译后的程序,被优化成相当精简的原生型指令码。
3.2测试方法
根据JVM的执行机制特点进行测试。
首先对比测试启动性能,且对jvm不做任何修改。由于编译问题,startup.compiler.sunflow编译失败,将该测试从specjvm.benchmarks(即基准测试)参数中剔除。
再进行执行性能测试,设定预热时间为60s,预热后执行时间为60s,其余参数均设为默认,对jvm不做任何修改。即改动参数如下:
specjvm.benchmark.warmup.time=60s //设置预热时间60s

specjvm.iteration.time=60s       //设置迭代时长60s

3.3 测试结果3.3.1启动性能测试结果
单次测试结果如下。
表3-1 启动性能单次测试(ops/m)

图3-2 各个用例启折线图
从单次测试中各个用例测试结果情况来看,openJDK优于oracleJDK,为方便更好得出性能整体优劣情况,进行多次测试,对比SPECjvm2008综合结果。
表3-2  三次测试综合结果(ops/m)

图3-3 三次测试综合结果折线图
从中可以看出JDK重复测试时整体性能表现变化不大,表现较为平稳。而且其中openJDK优于oracleJDK,快20%-25%。
3.3.2执行性能测试结果
在规定时间内,按照顺序多线程多次迭代测试用例结果如下所示:
表3-3 执行性能单次测试(ops/m)(ops/m)

图3-4 各个用例启折线图
从上数据中可以看出,各个用例测试结果中openJDK除了sunflow (图片渲染性能)比oracleJDK差外,其他性能都优于oracleJDK,其中crypto加解密算法性能是oracleJDK的2倍多。
再进行多次重复测试,对比SPECjvm2008综合结果如下。

图3-5 各个用例启折线图
从中可以看出JDK重复测试时整体性能表现变化不大,表现较为平稳。而且其中openJDK优于oracleJDK,快10%-20%。

结合两个实验的结果,可以得出,在ARM架构下,openJDK性能优于OracleJDK性能,综合快10%-20%。这与《在2017年末,Oracle JDK和OpenJDK的性能差差异有吗?》(https://qiita.com/ukiuni@github/items/5bb523c31bb4b4f9a278)一篇博文中,利用测试代码测试1000次CRUD (crud指做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)) 而得出的结论相近:在arm机器上OpenJDK快。


compiler.png
compilerAll.png
JDK.png
JIT.gif
startup.png
startupAll.png

用例.pdf

278.23 KB, 下载次数: 0

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入我们,

科技改变生活,让生活变得更美好...

立即注册

如果您已拥有本站账户,则可

推荐阅读

Arm+AI开发者社区

不忘初心,奋力交出新时代的精彩答卷

返回顶部 返回列表