跳到主要内容

JEP 422:Linux/RISC-V 端口

概括

将 JDK 移植到 Linux/RISC-V。

动机

RISC-V是一种免费开源的 RISC 指令集架构 (ISA),最初由加州大学伯克利分校设计,现在在RISC-V International的赞助下合作开发。它已经得到了广泛的语言工具链的支持。随着 RISC-V 硬件的可用性不断增加,JDK 的移植将变得很有价值。

描述

RISC-V ISA 实际上是一个相关 ISA 家族,其中目前有四种基础 ISA。每个基本 ISA 都可以配置一个或多个标准扩展。

Linux/RISC-V 端口仅支持 RISC-V 的 RV64GV 配置,这是一种包含向量指令的通用 64 位 ISA。将来我们可能会考虑支持其他 RISC-V 配置,例如通用 32 位配置 (RV32G)。

该端口将支持以下 HotSpot 子系统:

  • 模板解释器,
  • C1(客户端)JIT 编译器,
  • C2(服务器)JIT 编译器,以及
  • 当前所有主线 GC,包括 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 硬件的可用性可能存在一些问题,但我们希望它在不久的将来能够广泛使用。