JEP 422: Linux/RISC-V Port | Linux/RISC-V 端口
摘要
将 JDK 移植到 Linux/RISC-V 平台。
动机
RISC-V 是一种免费且开源的精简指令集(RISC)架构,最初由加州大学伯克利分校设计,现在则在 RISC-V 国际 的赞助下进行协作开发。它已得到广泛语言工具链的支持。随着 RISC-V 硬件的日益普及,将 JDK 移植到该平台将变得非常有价值。
描述
RISC-V 架构实际上是一系列相关架构的家族,目前包含四个基本架构。每个基本架构都可以配置一个或多个标准扩展。
Linux/RISC-V 移植将仅支持 RISC-V 的 RV64GV 配置,这是一个包含向量指令的通用 64 位架构。未来我们可能会考虑支持其他 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 基准测试。
华为技术有限公司、阿里巴巴和 Red Hat 定期在 Linux/RISC-V 以及当前支持的 JDK 平台上构建和测试此移植,以确保不会引入破坏现有平台的回归问题。
华为技术有限公司承诺全面支持(即定期更新、增强和测试)本工作引入的代码。
风险和假设
对于本工作,RISC-V 硬件的可用性可能存在一些问题,但我们希望它将在不久的将来得到广泛应用。