08-23
2016
根植LoongISA 服务新生态
一、引言
Java虚拟机(JVM)是整个Java技术体系的核心,是实现Java平台无关性和安全性的基石。Java程序是平台无关的,但Java虚拟机却是平台相关的。目前,应用最广泛、设计最先进的Java虚拟机当属Oracle主力维护的OpenJDK系列虚拟机。但OpenJDK官方仅支持x86和sparc架构处理器(近几年才开始新增对Power PC和ARM架构的支持),并不支持MIPS处理器。为了在龙芯处理器上运行Java,龙芯公司及时组建了Java虚拟机团队,专门负责OpenJDK在龙芯平台上的移植和优化。Java虚拟机团队经过好几年的艰苦攻关,终于使得Java可以稳定高效地在龙芯处理器上运行,为龙芯的市场开拓和生态建设奠定了坚实的基础。
目前,龙芯同时维护OpenJDK6(32位和64位)和OpenJDK8(64位)两个虚拟机版本。考虑到未来Java虚拟机的发展趋势,龙芯Java虚拟机团队主力维护OpenJDK8,后期所有升级和优化主要针对OpenJDK8进行;而OpenJDK6原则上只进行功能性Bug的修复。因此,为了更高的运行效率和更及时的技术支持,笔者强烈建议所有龙芯上的Java应用尽可能使用OpenJDK8开发。2016年5月,龙芯OpenJDK8免费向全世界开源(http://hg.loongnix.org),龙芯将其多年的心血回报给了开源社区。据笔者所知,龙芯首次完整实现了OpenJDK的MIPS分支,堪称OpenJDK发展史上的一个里程碑。
那么龙芯OpenJDK8的开源是否标志着龙芯Java虚拟机的成熟呢?龙芯Java虚拟机团队在开源之后又做了些什么呢?未来龙芯Java虚拟机的发展当何去何从呢?
二、奔跑吧,龙芯JVM
龙芯对于Java虚拟机性能的追求永无止境。虽然Java应用早已稳定高效地运行在龙芯平台上,龙芯Java虚拟机团队从未停止前进的步伐。OpenJDK8 MIPS分支的开源对于龙芯而言,既是一种鼓舞和激励,更是一种鞭挞和责任。一方面,作为一个处理器硬件供应商,龙芯是整个国产自主信息产业生态链的根基,有责任将Java虚拟机等底层系统软件维护好,以向上层客户提供一个友好的开发平台。另一方面,作为OpenJDK唯一完整实现的MIPS分支,龙芯有义务持续优化,以便为更多的MIPS平台提供一个高效的Java运行环境。因此,龙芯Java虚拟机团队在开源之后没有丝毫松懈,继续加速向前奔跑。
龙芯开源社区(http://www.loongnix.org/)网站中的Java版(http://www.loongnix.org/index.php/Java)是及时了解龙芯Java虚拟机最新发展动态的有效途径。从该版中我们可以看到,龙芯JDK8开源后仅一个月,龙芯又发布了JDK8 MIPS分支的新版本—JDK8-mips64-rc16。该版本消除了龙芯Java虚拟机中大量非对齐存储访问,并对虚拟机中数组拷贝进行了优化。业界权威的SPECjvm2008的评测数据表明,相对于上一个发行版,JDK8-mips64-rc16的性能提升幅度超过了20%!
三、根植LoongISA,服务新生态
对Java的高效支持是龙芯不断发展壮大其软件生态的关键。据Oracle的官方统计数据,全球有超过97%的企业基于Java进行应用开发。世界著名的编程语言排行榜TIOBE在2016年1月的统计数据表明,Java的流行度再次位居榜首。Java技术的应用和发展达到了前所未有的高度。凭借其优秀的平台无关性、安全性和网络移动性等优势,Java必将在云计算、大数据、移动互联网和物联网等新兴应用中大显身手。
既然Java对龙芯的软件生态如此重要,龙芯Java虚拟机未来的发展方向又是什么呢?对于这个问题,我们可以从龙芯OpenJDK8的开源代码中(http://hg.loongnix.org/jdk8-mips64-public/hotspot/)找到一 些答案。从代码库中最近提交的patch可以大致推断出未来龙芯Java虚拟机发展的两个重要方向:
1. 基于MIPS兼容的LoongISA指令系统,充分挖掘龙芯处理器硬件性能
LoongISA指令系统兼容MIPS64指令,并新增了1400多条龙芯扩展指令,涉及基础指令、虚拟机指令、面向x86和ARM的二进制翻译指令和向量指令等四个方面。LoongISA是龙芯于2015年8月18日在其3A2000芯片中首次发布的一套自主指令系统。为了充分发挥LoongISA指令系统,尤其是龙芯扩展指令在Java虚拟机中的优势,龙芯Java虚拟机团队在其开源的OpenJDK8中首次引入了“UseLoongsonISA”优化选项。该优化选项标识着龙芯开始在其Java虚拟机中大范围启用自定义的扩展指令。通过虚拟机启动参数“-XX:- UseLoongsonISA”可以随时禁用针对龙芯特有的优化,从而兼容其它标准MIPS架构处理器。LoongISA可以更加充分地发挥龙芯处理器的硬件性能,期待未来可以将龙芯Java虚拟机的性能推向新的高度。
2. 将编译原理与龙芯具体实践相结合,深度优化虚拟机即时编译器(JIT)性能
龙芯近期提交了几十个性能优化的patch,其中绝大部分都是针对HotSpot Server版JIT的优化补丁。JIT编译器直接决定了Java虚拟机的性能,而HotSpot Server版JIT是OpenJDK中性能最高的编译器,故近期龙芯Java虚拟机团队倾注了大量心血对其进行深度优化。由于官方开源的JIT主要针对x86等传统架构的处理器进行设计,龙芯需要不断改进原始的编译器设计,以更好地适应龙芯处理器的硬件结构和流水线特性。目前龙芯正对OpenJDK8 Server版JIT的后端进行大刀阔斧的优化,其目的是为了强化JIT对LoongISA的支持,并且要让编译器更加适应龙芯处理器的流水线特性。当然,龙芯团队对于JIT的优化绝不会仅限于编译器后端,将来肯定也会对编译器的前端进行优化,以将处理器的性能发挥到极致。
龙芯Java虚拟机近期又做了很多优化,其优化的效果又如何呢?由于缺乏龙芯官方正式发布的优化数据,笔者将龙芯开源的OpenJDK8在3A2000机器上进行了编译,并以基本数学运算为例直观地感受了一下近期龙芯Java虚拟机的优化效果,如表1所示。表中优化前的数据表示JDK8-mips64-rc16虚拟机的性能,优化后的数据表示当前龙芯开源Java虚拟机的性能。从这些数据可以看出,乘除法和求余操作等基本数学运算的性能普遍提升70%以上。从龙芯开源代码所提交patch的描述信息可知,上述优化效果主要源于JIT编译器新增了对LoongISA中gsdmult和gsddiv等龙芯扩展指令的支持。可以预见,随着JIT对LoongISA支持的不断完善,龙芯Java虚拟机的性能将会越来越高。因此,“根植LoongISA,服务新生态”已成为未来龙芯Java虚拟机前进的重要方向。
表1 龙芯OpenJDK8性能优化效果
![](/uploads/allimg/160825/2-160R5224TT59.png)
四、结束语
随着应用系统对Java性能的要求不断增加,龙芯对Java虚拟机的优化是永无止境的。龙芯将其精心维护的OpenJDK8 MIPS分支开源,一方面是为了回馈开源社区;另一方面也希望能够吸引更多的开源爱好者加入到MIPS分支的开发者队伍中来。龙芯Java虚拟机团队迫切期待每一位开源爱好者的贡献。您可以通过龙芯开源社区(http://www.loongnix.org/)积极参与龙芯Java虚拟机的开发和维护,为OpenJDK MIPS分支的持续优化和软硬件生态的建设贡献力量。未来,龙芯的软件生态会因为您的支持和参与而变得愈发精彩!