跳到主要内容

JEP 388:Windows/AArch64 移植

QWen Max 中英对照 JEP 388: Windows/AArch64 Port

总结

将 JDK 移植到 Windows/AArch64。

动机

随着新的消费级和服务器级 AArch64(ARM64)硬件的发布,由于终端用户的需求,Windows/AArch64 已成为一个重要的平台。

描述

我们通过扩展之前为 Linux/AArch64 移植所做的工作 (JEP 237),已经将 JDK 移植到 Windows/AArch64。该移植包括模板解释器、C1 和 C2 JIT 编译器以及垃圾收集器(串行、并行、G1、Z 和 Shenandoah)。它支持 Windows 10 和 Windows Server 2016 操作系统。

此 JEP 的重点不是移植工作本身(这项工作大部分已经完成),而是将移植集成到 JDK 主线仓库中。

目前,我们有十几个变更集。我们已经将对共享代码的更改保持在最低限度。我们的更改扩展了 AArch64 内存模型对 Windows 的支持,解决了一些 MSVC 问题,为 AArch64 移植添加了 LLP64 支持,并在 Windows 上执行 CPU 特性检测。我们还修改了构建脚本,以更好地支持交叉编译和 Windows 工具链。

新的平台代码本身仅包含 15 (+4) 个文件和 1222 行 (+322)。

早期访问的二进制文件可在此处获取:这里

测试

我们已经在 AArch64 测试系统上进行了全面的功能、性能和回归测试,这些系统包括 Ampere eMAG1、Marvell ThunderX2(启用了 SMT 和未启用 SMT 的情况),以及 Surface Pro X。我们的测试套件包括 JTReg、JCStress、jmh-jdk-microbenchmarks、JFC 应用程序和小应用程序(demo/jfc)、SPECJBB2005、SPECJBB2015、SPEC SERT、SPECJVM2008、DaCapo,以及一些较小的基准测试。其中两个测试矩阵有详细的文档记录:JTRegSPECJBB2015

除了 AArch64 系统外,我们还在 x64 系统(Intel Skylakes)上测试了我们的补丁。我们的测试覆盖范围包括 Linux/AArch64、Windows/AArch64、Windows/x64,以及仅用于功能测试的 Linux/x64。

我们有适用于功能测试的稳健 CI,并且在我们做出进一步更改时,将继续通过 CI 运行我们的补丁。

风险与假设

  • 我们已经对 Linux/AArch64 后端的共享代码进行了更改,以扩展 LP64(64 位长整型和指针),从而适应 64 位 Windows 平台所需的 长长整型和指针 (LLP64)

  • 我们还修改了 Windows 上的共享代码,如上所述。

  • 我们需要重新设计寄存器 x18 的使用,在 Windows/AArch64 上,它被用于 Windows 线程环境块 (TEB)。我们正在与 AArch64 移植项目的负责人合作,寻找一个优雅的解决方案。