微软对OpenJDK做出第一个重大的贡献:在ARM上成功移植OpenJDK for Windows 10

2020 年 8 月 26 日

微软对OpenJDK做出第一个重大的贡献:在ARM上成功移植OpenJDK for Windows 10

随着 ARM 处理器在其笔记本电脑云环境可用之后,微软对 ARM 处理器的热情更进一步。今年夏天,微软对 OpenJDK 做出了第一个重大贡献:将 OpenJDK 迁移至 Windows 10 ARM(AArch64)的第一阶段。具体来讲,这意味着我们可以在 Windows 10 的 ARM 机器上开发和运行 Java 代码了。


移植工作是 Monica Beckwith 加入微软之后所领导的第一个项目。InfoQ 联系到了她以及面向 Java 工程组 SWE 的主要负责人 Martijn Verburg,和他们探讨了这对于 Java 社区意味着什么。我们是否已经可以切换至 Surface Pro 作为 Java 开发机器?我们能够从 Azure 上的 ARM 处理器中获取性能收益吗?


InfoQ:感谢你们花费时间来回答我们读者的问题。你们能首先简要介绍一下自己并描述一下在微软的角色和日常工作吗?


Martijn Verburg:大家好,我是Martijn Verburg,在微软我是面向Java工程组SWE的主要负责人。在此之前,人们知道我可能是因为我曾经担任jClarity(去年微软收购了它)的CEO的角色,或者作为AdoptOpenJDKJakarta EE指导委员会的成员之一。有一些谣言说我是“恶魔的开发人员”,但我是一位经理,所以这并不是真的。

Monica Beckwith:大家好,我是Monica,我是Arm64上Windows OpenJDK项目的领导者。我的日常工作包括改善OpenJDK的Hotspot VM。自从2006年Sun开始OpenJDK项目以来,我就一直在使用OpenJDK。我主要从事性能方面的工作,包括优化应用程序、JVM并探索GC算法,确保生成的代码与底层的硬件相匹配。在进入微软之前,我在Arm担任托管运行时环境的性能架构师。


InfoQ:这是微软对 OpenJDK 的第一个重大贡献。为什么会从 ARM 开始?最难解决的问题是什么?进展如何?你们做了哪些与众不同的事情呢?


Verburg:关于ARM,微软在两个方面很感兴趣。我们的Surface X Pro产品线运行在ARM的硬件上,另外,我们在2017宣布计划在云基础设施上提供对ARM的实验性支持。

至于这种迁移所面临的挑战,从我的角度来讲,看到团队在如下这些方面所花费的时间和精力是非常有趣的:

  • OpenJDK社区将补丁切分为多个易于理解的块(在我们的场景中也就是四个补丁集)

  • 测试(功能性、性能以及两者的回归测试)

当我们添加新的移植支持时,会添加全新的代码,然后(我个人认为)更复杂的事情是对共享代码的修改。对我们来说,不破坏已有的东西(Linux aarch64)是非常重要的,但是这确实耗费了许多工程周期来确保补丁是正确的并在两个平台完成整体测试。正是这种认真和专注让我对这个团体的努力感到特别自豪;他们为这种工作设定了很高的标准。感谢Monica的领导和她团队的工作;他们从头到尾都做到了这一点,而且表现得非常出色。

Beckwith:对于微软来说,Windows(10)支持Arm (Windows 10 on Arm,WoA)是一项重大的举措。我们为开发人员所提供的第一个现代、基于云环境的WoA产品是Surface Pro X设备

Arm64拥有一个非常丰富的生态系统,随着Arm服务器的推出,显然我们需要有一个针对Java的移植,这样才能支持我们在“用Arm服务器处理器驱动数据中心创新”的投资。

Red Hat在移植OpenJDK到Arm64的Linux上方面已经做得非常棒了。鉴于我们Windows开发人员的基础,所以将Windows移植作为对OpenJDK生态系统的第一个重要贡献是非常有意义的。我们想向OpenJDK社区传递这样一个信号:我们来这里是为了与Java平台协作并提供帮助的。

至于移植所面临的最大挑战:我认为在开始进行移植的时候,我们意识到将会接触linux-aarch64代码库和windows-x86-64代码库中的共享代码。我们想要确保“最小化我们的影响”,因为我们的目标不仅是推出对新平台的支持,还要支持、清理和合并我们所接触到的所有内容

正如Martijn在前面所述,我们还投入了大量的精力为测试和构建过程搭建健壮的CI,我们想要确保在所有的平台和组合上运行功能性测试。我们还在windows-aarch64、linux-aarch64和windows-x86-64测试平台上运行性能对比和回归测试。关于更多的细节,请参阅JEP 388的“测试”章节。


InfoQ:社区对这些贡献的反应是什么?AArch64 可以让开发人员使用了吗?如果是这样的话,它的限制是什么?对于急于使用 AArch64 版本的开发人员,有什么建议吗?


Verburg:我们对社区的反应感到非常开心。在Reddit、Hacker News以及各种Java社区,这项移植得到了广泛的好评。我认为最能说明问题的是补丁的质量(正如Red Hat的Linux Aarch64移植项目的主管Andrew Haley所言)以及对游戏领域的机会感到兴奋的普通Java用户。

Beckwith:我们觉得OpenJDK社区向我们敞开了怀抱,在对我们的补丁进行审查和反馈方面提供了巨大的支持!我个人对我们收到的赞扬和报道感到惭愧。移植本身已经完成,我们正在实现进一步的特性。因为Arm64之上的Windows是一个相对较新的平台,所以我们也在关注原生组件和类似依赖的可用性,例如借助我们的移植运行Minecraft,我们需要确保LWJGL能够在新新平台上运行。


InfoQ:预计什么时候才能安全地在生产环境使用它呢?在你们的工作中在使用该平台吗?如果你们在使用它的话,感觉如何?


Verburg:对于生产环境的建议,我们会相当保守。在宣布生产环境就绪之前,我们还要经历多个质量相关的里程碑:

  1. 代码需要完整合并到OpenJDK jdk/jdk(即主线)。

  2. 我们需要内部完成技术兼容性套件(Technical Compatibility Kit,TCK)测试。

  3. 我们需要确保通过所有的AdoptOpenjDK质量保证(AdoptOpenjDK Quality Assurance)套件。在这一点上,我们已经做得很好了。

  4. 我们需要确保能够运行所有重要的行业功能性和性能基准测试。我很高兴地告诉大家,Monica、Ludovic、Bernhard以及我们的团队在这里也取得了很大的进步。

所有这些都是可以实现的。我们知道如何处理它们,这只是工程方面的工作,在完成之前之前我们需要一些时间。

我们确实在使用自己的成果,但是目前我不能发表更多的评论。

Beckwith:我的座右铭是“信任但要进行验证”。我将其用到了任何有针对性的性能改善和我们上游的补丁上。所以,我的建议是验证这个移植是否适合你们的环境,并且请为我们提供反馈。

现在,回到我的开发工作,我想要强调,我有一个简单的标准来确定该移植的状态:将staging仓库集成会主线并且移植能够通过TCKAQA测试。

我们确实在“吃自己的狗粮”,我可以证明它的味道真的很不错!我的一个工作和测试系统是笔记本配置的Surface Pro X,它的表现让我印象深刻。


InfoQ:在 OpenJDK 的发布过程中会进行一些基准测试吗?相对于其他的架构,ARM 架构的表现如何?


Verburg:整个这些我们都已经做了。我对团队成员的努力感到自豪。在阐述细节方面,我比Monica差远了,所以让她来介绍吧。

Beckwith:除了上述知名的测试,我还在我们的openjdk-aarch64 GitHub仓库中维护了一个工作负载状态界面。Arm64服务器非常具有竞争力,我们已经看到了非常棒的结果。


InfoQ:目前,似乎出现了针对 ARM 处理器的淘金潮:苹果正在将他们的芯片转向基于 ARM 的架构,AWS 也在不久之前发布了 ARM 服务器。那么使用该处理器的好处是什么?Azure 也会在不久之后支持 ARM 服务器吗?


Verburg:这会潜在地降低每个计算单元的能源消耗,实现成本的节省(反过来又会导致COGS的减少),这让整个行业都在关注这个问题。现阶段,我们不能评论Azure产品的具体方向,但是可以肯定的是,微软正在仔细研究这个问题。

Beckwith:随着Neoverse N1核心的引入(Arm 8.2 ISA),Arm已经为服务器/云市场做好了充分的准备。传统上,Arm支持较弱的内存模型,这意味着在多核环境中,当数据访问需要遵循预先定义的程序执行顺序时,就需要在软件层面介入,通过在代码中包含守卫/屏障/栅栏(guard/barrier/fence)来保证执行顺序。

对于支持Arm 8.1+ ISA的平台,我们已经看到了一些改善,这要归功于新的原子指令,在Neoverse中,我们也看到了智能设置屏障(如果确实不需要的话,可以完全消除它们)。除此之外,借助7nm的芯片,我们还看到了能耗的降低和性能的改善。


InfoQ:大约在一年前,jClarity 被微软收购,其宣称的目的是帮助 Azure 的 Java 工作负载。过去的一年中,您和 jClarity 其他的人过的怎么样呢?


Verburg:这是一个非常棒的旅程。学习新的公司系统是很有挑战性的,我们从Google Docs和Slack迁移到了Office 365和MS Teams。同世界各地买来的其他Java VM主机、工具和基础设施专家构建共同的文化也需要时间。跨越六个不同时区的团队建设本身就很有挑战性,但通过一些创造性的思维,这些问题都是可以解决的。

我们已经能够继续推进jClarity的愿景,也就是ML引导的性能诊断,我们现在能够通过一个完整的VM工程团队影响Java的核心,所以我们很高兴最初的想法能够持续发挥更大的影响力。

我对其他被收购的创业公司的建议是需要六到九个月的时间才能真正适应,只有到那时,你才能考虑按照以前的节奏继续前进(然后最终超越它)。

我们现在又进入了一个快速发展的阶段,生产出了一些令人赞叹的软件,所以我个人感觉我们又回到了快速发展的创业公司的节奏,但是,现在是一个资源充足的公司,而且懂得如何经营企业。


InfoQ:Martijn,jClarity 被微软收购对 AdoptOpenJDK 意味着什么呢?它是否会带来与公司相关的繁琐的决策过程?


Verburg:微软有一个非常明确的策略,那就是我们会成为AdoptOpenJDK的平等合作伙伴,而不会因为它的体量造成不适当的影响。起初,因为整个jClarity都在忙于开始适应新的角色,肯定会有一些混乱。

但是,比起在jClarity,现在情况已经有所改善,因为我们可以让更多的人力加入到这个项目的基础设施、构建和测试中来,还有一些受欢迎的Azure计算能力!Adopt依然由指导委员会进行管理,我很高兴地说,没有任何事情受到公司繁文缛节的拖累和约束。事实证明,微软最近在开源方面做得非常好,所以我们被鼓励继续从事我们正在做的事情。


InfoQ:微软还为 OpenJDK 做了很多贡献,从技术上来讲,其中哪些是最困难的?


Verburg:我认为Stack Allocation提案和Windows ARM 64移植在工作量/复杂性方面大致相当。它们都需要深入研究Hotspot的运行方式,这需要大量的专业知识并且要非常仔细,以便于在没有损失的情况下提供新的收益。

Beckwith:正如Martijn所述,stack allocation是我们最大的工作之一。我们也在研究内联改进和其他类似JIT的优化。


InfoQ:ARM 移植和整个团队接下来的工作是什么呢?


Verburg:对于ARM移植,我们需要进行最后的完善,通过TCK的运行测试,JEP目标则是Java的主版本发布。我想Monica在这方面可以提供更多有趣的细节。

总的来说,团队将继续致力于OpenJDK的改进,这将对第一方和第三方Java工作负载产生积极的影响。我们正在研究Azure和Minecraft等子公司的内部和客户工作负载,看看我们可以在哪里创造最大价值。我要强调的是,这项工作将会在OpenJDK项目的上游继续进行;微软在OpenJDK是好公民,我们很高兴能回馈这个美妙的社区!

我们还将考虑将jClarity的基于ML性能诊断的IP集成到各种Azure服务中,但目前还没有具体的产品发布。

最后但同样重要的是,你还将看到来自我们的更多社区推广,包括AdoptOpenJDK的持续支持(以Eclipse Adoptium的形式转移到了Eclipse基金会),以及通过我们的Java at Microsoft博客和@javaatmicrosoft Twitter账号源源不断地发布文章、帖子和材料。

Beckwith:我们的一些重要里程碑如下所示:

  • 将staging仓库合并至上游

  • JDK发布版并不是唯一的目标,还要完整地集成和交付Arm64上Windows的移植。

  • 我们期待实现TCK合规检验。

就个人而言,我还希望推动支持OpenJFX、Minecraft以及类似的原生组件。

就团队来讲,我希望能够不断优化JVM并与Java/JVM路线图进行集成和保持一致,尤其是一些有益的生态系统项目,举例来说Panama、Metropolis、Valhalla等。


原文链接:


OpenJDK Comes to Windows 10 on ARM


2020 年 8 月 26 日 14:221430

评论

发布
暂无评论
发现更多内容

金融科技 | 建设中台能力,助力开放生态

xcbeyond

金融科技 中台战略 中台架构

【架构师训练营 1 期】第十二周学习总结

诺乐

以理性不断的崇敬 - 对DDD之后复杂业务软件系统设计的思考

Winfield

领域驱动设计 DDD 架构设计

Sentinel 是如何做限流的

vivo互联网技术

高可用 限流 底层

从面试角度分析ArrayList源码

Java旅途

Java List 面试 ArrayList

甲方日常 67

句子

工作 随笔杂谈 日常

【架构师训练营 1 期】第十二周作业

诺乐

FORSAGE智能合约矩阵系统软件APP开发

开發I852946OIIO

系统开发

一鼓作气学会“一致性哈希”,就靠这 18 张图了

四猿外

分布式 算法 一致性哈希 一致性Hash算法 哈希算法

访问者模式及其在Java Parser中的应用

maijun

《逻辑和计算机设计基础》第五版(英文原版)PDF免费下载

计算机与AI

计算机基础 计算机组成原理

我国一项物联网安全测试技术成为国际标准;Windows 10将支持安卓应用

京东智联云开发者

京东智联云与CDA携手 共同打造电商领域数字化人才认证标准

京东智联云开发者

大数据 数据分析 数据分析师

关于敏捷开发的最佳实践和工具

PingCode

程序人生 敏捷开发 研发管理 管理工具 开发平台

跨越“数字鸿沟”,日本老年智能化服务的解法

脑极体

新增原创标签相关改动

yinhaixiang

测试 个人 aa bb

新增原创标签相关改动

yinhaixiang

aa bb cc

架构师训练营第四周总结

Geek_xq

ISP芯片:如何让数字之眼“看清”真实世界?

脑极体

生产环境全链路压测建设历程之九 淘宝网全链路压测的原理

数列科技杨德华

领域驱动设计(DDD)实践之路(四):领域驱动在微服务设计中的应用

vivo互联网技术

架构 领域驱动设计 DDD 领域驱动设计DDD

还在手写Operator?是时候使用Kubebuilder了

Java架构师迁哥

Week_12 作业

golangboy

极客大学架构师训练营

数据类型· 第1篇《元组和列表的性能分析、命名元组》

清菡

测试开发

区块链发展前景广阔,要紧跟时代步伐

13828808769

区块链发展 时代发展

如何搭积木式的快速开发H5页面?

徐小夕

Java 前端 前端工程 React 数据可视化

Java虚拟机科普系列—元空间Metaspace的内存结构

Java老k

Java JVM Java虚拟机 metaspace

时序数据库DolphinDB和TimescaleDB 性能对比测试报告

DolphinDB

大数据处理 分布式系统 时序数据库 DolphinDB 数据库开发

浅谈产品与项目之间的爱恨情仇

求求你,别再用wait和notify了!

王磊

Java

ReactNative | 项目复盘,涉及环境、RN版本升级、安全等方案

梁龙先森

前端 混合应用开发 React Native

微软对OpenJDK做出第一个重大的贡献:在ARM上成功移植OpenJDK for Windows 10-InfoQ