科普文:【支持信创、宣传国产】Alibaba Dragonwell JVM性能提升50%

news2024/9/24 14:56:47

4月5日,阿里云开放了新一代ECS实例的邀测[1],Alibaba Dragonwell也在新ECS上进行了极致的优化。相比于之前的dragonwell_11.0.8.3版本,即将发布的dragonwell_11.0.11.6在SPECjbb2015[2] composite模式测试中,系统吞吐量max-jOPS提升55%,响应时间约束下的系统吞吐量critical-jOPS提升602%。

如下图所示,图中数据做了归一化处理,以11.0.8.3_GA的critical-jOPS为1个基准单位。测试环境:阿里云80核,256g内存ECS实例,操作系统为Alinux3 [3]。

Alibaba Dragonwell

过去的十几年中,Java在阿里巴巴内部迅猛发展。阿里内使用Java语言编写的应用越来越多,数万的Java开发者每年产出超过十亿行Java代码,这些代码都运行在阿里巴巴内部的OpenJDK定制版AJDK上。Alibaba Dragonwell是AJDK的开源版[4](github链接见文章末尾),使用和OpenJDK一样的License,并永久免费。Alibaba Dragonwell有8和11两个版本,于2019年开源,当时仅支持x86-64架构,在2020年扩展到AArch64平台。

Alibaba Dragonwell结合阿里在线电商、金融、物流等各个业务场景做了大量细致优化,添加了协程/多租户/Jwarmup等诸多自研特性,并且在阿里云超大规模的服务器集群上经受了长时间大规模的验证。

调优方案与工具

由于SPECjbb2015动辄就需要两个小时才能得到一次完整的跑分分数,为了压榨性能调优单位时间内我们所能获得的信息量和性能试验的效率,我们开发了自动测试平台和性能分析工具来辅助SPECjbb2015性能调优,并且这套方法可以用在未来更多类似的性能调优案例中。

自动测试平台可以自动发起测试,并且在测试过程中调用基于perf的性能分析工具来采集CPU微架构数据以及系统热点数据,从而收集到每次实验过程中的关键性能数据,并将数据存档以可视化界面的形式展现,方便未来回顾和分析。

同时为了避免SPECjbb2015单次实验耗时长影响效率,跑性能实验时我们采用了SPECjbb2015特殊的PRESET模式。该模式下可以指定压力指定时间来启动性能测试,不仅方便调优系统进行性能采集,还可以观察在一定压力下SPECjbb2015的系统热点和微架构数据情况。

我们通过该套调优系统获取到了Alibaba Dragonwell和其他JDK在跑SPECjbb2015时的热点和微架构数据,并且发现了诸多优化机会,如在GC热点和暂停时间上有较为明显的问题,从而深入到相关代码,并以性能数据为线索解决了相关的性能问题,具体的技术细节将在下文中向大家一一道来。

GC暂停时间优化

这项优化源于一个出人意料的发现,在SPECjbb2015中GC暂停时间竟然超过了总运行时间的20%,并且稳定复现。

通过上一小节中提到的调优系统,定位到出问题的是一个GC任务队列相关函数,并且明确的指向了原子Compare and Swap(CAS)相关代码。

新ECS采用的CPU架构中CAS主要有如下的两种实现方式:

  • 使用带load-aquire和store-release语义的指令对的实现方式
  • LSE指令集中的CAS专项指令

多数JVM在GC中使用第一种方法,然而第二种在高冲突的情况下性能更加出色,因此Dragonwell改变了编译方式,使用LSE指令集实现CAS,有效的减少了暂停时间。下图展示了优化效果,我们采集了SPECjbb2015运行在不同核数上的GC数据,并采用吞吐量作为衡量GC性能的指标。 吞吐量 = (运行时间 – Stop-The-World时间)/运行时间 * 100%

我们可以看到优化前的CAS方式会造成吞吐量随使用的核数增加而剧烈下降,在80核的情况下甚至不足80%,而使用LSE CAS后吞吐量稳定在99%以上。对这个优化的另外两点补充说明:1. 此改动只针对JVM内部的CAS实现,不包括JIT(Just-In-Time)生成的代码。JIT会动态检查硬件特性,在支持LSE指令集的系统上会优先使用LSE指令集。2. 除了使用LSE CAS外,改变GC队列算法减少CAS也可以达到减少暂停时间的效果,OpenJDK社区在新版本中采用了这种方法。不过两种办法并不冲突,Alibaba Dragonwell同时采用了两种优化,达到了最优效果。

快速序列化

Alibaba Dragonwell在保证兼容性基础上对java原生序列化进行了优化,通过缓存大幅提高了性能。通过分析发现, 原生序列化瓶颈大多在于大量的class 查找,如在反序列化时需要获取对端类定义的元信息等。引入了一层通过类全限定名和类加载器映射到java类对象的缓存,减少了大量Class.forName的调用。具体做法:在反序列化时获取到类描述符,再根据类描述符查找信息时将会受限从classCache中查找,命中则立即返回,如果没有找到当前classloader和类全限定名唯一指定的类对象,将会走默认的类查找流程并且将结果缓存。同时, 在反序列化时会大量调用latestUserDefinedLoader 来查找首个用户定义的类加载器,因为此过程较重(涉及一次JNI调用和爬栈)也进行了缓存。

指令融合

指令融合是指将多个指令使用效率更高的一条或者几条指令进行替换从而提高性能。

Dragonwell对内存屏障/内存读写/比较跳转等多个场景做了优化,由于篇幅限制而且此类优化原理较为类似,在此仅举一例,三条指令融合成一条,如下图所示。

上面介绍了Alibaba Dragonwell内部的一些优化,下面我们换一个角度,从参数调优方面介绍对SPECjbb2015的优化。

大内存系统开启压缩指针

SPECjbb2015是一个内存敏感型的测试,压缩指针对SPECjbb2015分数的提升非常明显。不过默认情况下使用压缩指针最大只能用32g内存,这对80核的系统来说实在是太小了。其实通过适当的参数组合,我们完全可以在更大的内存中使用压缩指针。

首先我们了解下压缩指针的基本原理。如上图所示,由于Java对象有明确的对齐要求,因此对象的地址必然由数个0结尾,0的个数由对齐位数决定。省略java对象地址结尾的数个0可解决内存而且不会丢失有效地址信息,需要访问对象时可以通过补0获得完整的地址。

由此可知,我们可以通过调整Java对象对齐位数控制压缩指针生效的最大内存。默认情况下Java为8字节对齐(3bit),加上压缩指针本身的的32bit,最多只能表示32g内存。但如果调整为32字节对齐,那么有37bit可以使用,也就是128g,这对于80核来说基本上够用了。

分层编译调优

分层编译是JVM最基础的机制之一,一般情况下对它改动比较少,不过在SPECjbb2015的场景下,在分层编译上仍有调优空间。首先介绍下分层编译。JVM在运行的时候动态的将字节码编译成机器码执行,JVM(hotspot)内部编译引擎主要有三个:

  1. 解释器:无编译开销,但解释执行效率很低。
  2. C1编译器:编译开销较低,生成代码质量一般。
  3. C2编译器:生成代码质量很高,但编译开销很高。

这三个编译引擎相互配合,执行次数较少的代码由解释器和C1负责,C2只编译热点代码,从而让Java可以达到峰值性能与编译开销的平衡,使应用运行更加平滑。不过分层编译也有自己的缺点,一个较为明显的问题是它会增大生成代码的总量。下图展示SPECjbb2015运行时C1/C2编译方法数目。

图中Level1-3均为C1编译,根据收集运行信息的力度不同分为了三个等级,Level4为C2编译。

我们可以看到C1编译了70%的方法,因此关闭分层编译,仅保留C2编译器可以减少生成代码,从而一定程度上提高高速缓存和叶表命中率。

对于SPECjbb2015来说,由于分数只取决于最后几分钟的峰值处理能力,前面大概两个小时的请求爬升阶段都可以视作预热,因此启动期的编译开销并不关键。

我们可以关闭分层编译来减少生成代码,提高高速缓存和列表命中率。最终在测试中发现关闭分层编译生成代码总量由29M降低到9M,有明显减少。

本文总结了Alibaba Dragonwell的一些重要优化措施,请注意阿里承诺会持续的优化Dragonwell性能,同时更紧密地和OpenJDK等开源社区协作,贡献更多的定制化特性,促进Java技术的持续发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】插值查找(对二分查找的优化)

引言 在二分查找中,对于相对较大的数或较小的数来说,查询效率是很低的,我们希望程序可以自适应待查询的数,使用插值算法 插值查找原理 1.插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找 2…

Airtest封装的Tidevice接口有多好用(二)

一、前言 上节课我们分享了一批Airtest封装的Tidevice接口,是有关获取设备信息的,还没看到的同学可以戳这里复习一下。那么本周我们继续来看一下Airtest还封装了哪些Tidevice的接口吧~ 二、Airtest封装的Tidevice接口 2.1 list_app(udid ,app_typeuse…

早得农元早享“富”!农元又双叒叕涨了!

农元升值设定的唯一途径,仅随着用户在平台每次的购物而升值,未来农元的价值升值甚至会达到几千、上万元人民币,真正实现了购物乐趣与财富增长的双重盛宴,让每一位平台用户都能享受到数字经济时代带来的红利。 快从消费者变为经营者…

警惕!六西格玛培训中不可不知的六大陷阱

近年来,随着六西格玛的普及,一些常见的培训陷阱也逐渐浮出水面,让不少求学者误入歧途。本文,深圳天行健企业管理咨询公司旨在为大家揭示六西格玛培训中的六大常见陷阱,真正掌握六西格玛的精髓。 陷阱一:速成…

KMP入门与算法题实践

基础知识 参考视频 下面是两个b站上个人借鉴学习的视频 第一个视频用来快速理解KMP: 【最浅显易懂的 KMP 算法讲解】 https://www.bilibili.com/video/BV1AY4y157yL/?share_sourcecopy_web&vd_sourced124eda224bf54d0e3ab795c0b89dbb0 第二、三个视频用来理…

vue3学习day01-vue3的优势、新的脚手架工具create-vue、创建vue3项目、vue3的项目文件内容、插件变化

1、vue3的优势 (1)更易维护:组合式api,更好的TypeScript支持 (2)更快的速度:重写diff算法,模版编译优化,更高效的组件化 (3)更小的体积&#x…

MES系统:生产实时监控与智能反馈,驱动制造业智能化升级

MES系统(Manufacturing Execution System,制造执行系统)通过集成多种技术手段和管理模块,实现了生产过程的实时监控与反馈。以下是实时监控与反馈具体实现的详细分析: 一、实时监控 1. 数据采集 传感器与设备集成&am…

nrm: npm 镜像源管理工具

nrm 是 “npm registry manager” 的缩写,是一个 npm 镜像源管理工具,用于在不同的 npm 镜像源之间快速切换,帮助开发者根据需要选择不同的源来加速包的下载或解决网络问题。 常用命令 详细介绍 以下是 nrm 的一些主要特性和用法&#xff1…

精美UI三方用户中心 新版QRuser用户中心主题 | 魔方财务模板

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 新版QRuser用户中心主题 | 魔方财务模板 本主题支持魔方财务3.5.7版本!可自由切换魔方财务3.5.7版本与其他版本。 本主题基于官方default开发,主要面向企业&…

Java语言程序设计——篇十一(1)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是CSDN,我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信&#x1f33…

【数据结构-前缀哈希同余运算】力扣974. 和可被 K 整除的子数组

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的非空 子数组 的数目。 子数组 是数组中 连续 的部分。 示例 1: 输入:nums [4,5,0,-2,-3,1], k 5 输出:7 解释: 有 7 个子数组满足其元素之和可…

仿真入门!Hypermesh焊接处理方法

某抗硫球阀为对焊端结构,需要焊接袖管。焊接过程产生的高温会造成热影响区域,尤其接头区域产生变形及残余应力,同时O型密封圈处的温度也是焊接生产比较关心的问题。因此,为弄清袖管焊接过程中温度场规律,给实际焊接生产…

RAID 级别:0、1、5、6、10 和 50 傻傻分不清?那是你没看过这篇

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 早上好,我的网工朋友。 大家都知道,无论是企业级服务器还是个人计算机,数据的安全性和可用性都是至关重要的。…

通配符HTTPS证书快速申请流程

通配符HTTPS证书是一种特别类型的HTTPS证书,它可以为一个主域名及其下级所有子域名提供安全加密。这对于拥有多个子域名的企业来说非常有用,因为它简化了管理流程,并降低了成本。具体申请流程: 注册账号填写230919注册码即可获得…

【C++】实验十四

题目: 1、编写程序,输入a,b,c,检查a,b,c是否满足以下条件,如不满足,由cerr输出有关错误信息。 2、从键盘输入一批数值。要求保留3位小数,在输出时上下行小数…

成都夏光汝网络科技有限公司抖音小店品质与创新的完美结合

在数字经济蓬勃发展的今天,电商行业以其独特的魅力和无限的可能性,正深刻改变着我们的消费习惯与生活方式。其中,抖音小店作为短视频与电商结合的典范,更是以其独特的优势迅速崛起,成为广大消费者喜爱的购物渠道。成都…

企业版邮箱如何确保全球畅邮

企业版邮箱如何确保全球畅邮呢?一邮箱通过多项国际隐私认证,加密技术保障数据安全。二是全球网络部署确保邮件畅通。三提供灵活价格方案,支持用户定制化和跨平台。四是第三方工具集成,提升效率。 一、Zoho邮箱的安全保障 1.1 高…

【Stable Diffusion】影楼再也赚不到你的钱,让SD帮你“拍摄”艺术写真

前言 点击上方「蓝字」关注我们 你能看出下图是一张经过AI技术处理过的写真吗? 通过原图AI合成,简单几步操作,一个无需摄影无需后期的0成本摄影工作室就诞生了。 今天就来教大家怎么用Stable Diffusion做出这样的写真效果。 操作过程 第一…

IDEA使用Docker打包镜像

IDEA使用Docker打包镜像 Docker服务器 想要使用idea直接打包docker镜像,需要一个docker服务,你可以安装windows版本的docker,或者安装Linux版本的docker到虚拟机中,这个根据个人想法即可。本篇文章使用的是Linux! W…

一图搞懂,全流程项目管理实践地图,驱动:市场-研发-售后

如何共同协作驱动 市场研发售后? 软件项目交付需要一段时间和长周期,而由于产品研发团队前与市场部门脱节、后又与售后支撑服务团队脱节的话,整体上会加剧项目管理的成本和内部跨部门协作的难度。 如何高效共同协作驱动 市场运营产品研发售…