08-23
2016
根植loongisa 服务新生态
-凯发k9国际首页登录
一、引言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的修复。因此,为了更高的运行效率和更及时的凯发k8国际首页登录的技术支持,笔者强烈建议所有龙芯上的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/image/ua160825/2-160r5224tt59.png)
四、结束语
随着应用系统对java性能的要求不断增加,龙芯对java虚拟机的优化是永无止境的。龙芯将其精心维护的openjdk8 mips分支开源,一方面是为了回馈开源社区;另一方面也希望能够吸引更多的开源爱好者加入到mips分支的开发者队伍中来。龙芯java虚拟机团队迫切期待每一位开源爱好者的贡献。您可以通过龙芯开源社区(http://www.loongnix.org/)积极参与龙芯java虚拟机的开发和维护,为openjdk mips分支的持续优化和软硬件生态的建设贡献力量。未来,龙芯的软件生态会因为您的支持和参与而变得愈发精彩!