JEP 422:Linux/RISC-V 端口
概述
将 JDK 移植到 Linux/RISC-V。
动机
RISC-V 是一种免费且开源的 RISC 指令集架构(ISA),最初由加州大学伯克利分校设计,现在在 RISC-V International 的赞助下进行协作开发。它已经得到了广泛的语言工具链支持。随着 RISC-V 硬件的日益普及,JDK 的移植将具有重要价值。
描述
RISC-V 指令集架构实际上是一个相关指令集架构的家族,目前有四个基础指令集架构。每个基础指令集架构都可以配置一个或多个标准扩展。
Linux/RISC-V 移植版将仅支持 RISC-V 的 RV64GV 配置,这是一种包含向量指令的通用 64 位 ISA。未来我们可能会考虑支持其他 RISC-V 配置,例如通用 32 位配置(RV32G)。
该端口将支持以下 HotSpot 子系统:
- 模板解释器,
- C1(客户端)JIT 编译器,
- C2(服务端)JIT 编译器,以及
- 所有当前的主流垃圾收集器,包括 ZGC 和 Shenandoah。
该 JEP 的重点不是移植工作本身(这部分工作已接近完成),而是将移植集成到 JDK 主线仓库中。
目前,我们在 JDK 的共享部分有一些细微的更改。这些更改主要是通过 #ifdef
来引入相关的平台特定文件。还有一些其他类型的更改,但同样,它们都通过 #ifdef RISCV
进行了保护。因此,对其他平台的风险较低。
JDK 的构建机制也进行了更改,以增加对字节序、字长等的适当定义。同样,这些更改不应影响其他平台。
获取 JDK 主线与 RISC-V 端口项目之间当前差异的方法是:
$ git clone https://github.com/openjdk/riscv-port riscv-port
$ cd riscv-port
$ git diff master..riscv-port
该差异的自动生成的 webrev 可在此处获取。
测试
该端口在 HiFive Unmatched 开发板上通过了 jtreg 第 1 至 4 级和 jcstress 测试。我们还定期进行 SPECjbb 和 SPECjvm 基准测试。
华为技术、阿里巴巴和红帽定期在 Linux/RISC-V 以及当前支持的 JDK 平台上构建和测试该移植版本,以确保不会引入破坏现有平台的回归问题。
华为技术有限公司承诺全力支持(即定期更新、增强和测试)此次工作引入的代码。
风险与假设
这里有一些关于 RISC-V 硬件可用性的问题,但我们希望它在不久的将来能够广泛使用。