GraalVM Native Image 在 RISC-V 上的应用

RISC-V架构与GraalVM的结合

RISC-V是第五代精简指令集计算机(RISC)架构,于2010年推出。它是一个开放的处理器指令集标准,基于开源许可证免费提供。GraalVM现在可以用于在RISC-V机器上编译和运行原生镜像。

GraalVM的编译机制

GraalVM默认使用Graal编译器生成机器代码。支持新架构的最难部分是为这些新架构实现Graal编译器。作为替代方案,可以使用LLVM后端,它允许用户支持当前GraalVM Native Image不支持的CPU架构。LLVM包含多种编译器和工具链技术,可以作为任何指令集架构的后端。LLVM用C++编写,支持多种指令集,如x86-64、ARM、WebAssembly和RISC-V。

LLVM后端的安装与启用

GraalVM的LLVM后端是一个独立组件,可以通过GraalVM更新器安装:

gu install native-image-llvm-backend

可以通过在native-image命令中提供-H:CompilerBackend=llvm参数来启用LLVM后端:

$JAVA_HOME/bin/native-image -H:CompilerBackend=llvm

LLVM后端使用LLVM编译器和LLVM中间表示来创建可执行文件。

在RISC-V机器上构建应用二进制文件

可以直接在RISC-V机器上构建应用二进制文件:

$JAVA_HOME/bin/native-image MyFirstRISCVApplication -H:CompilerBackend=llvm
  --add-exports=jdk.internal.vm.ci/jdk.vm.ci.riscv64=org.graalvm.nativeimage.builder

由于RISC-V机器上的Linux运行速度较慢,也可以在其他架构上进行交叉构建。Sacha Coppey提供了如何设置环境以在另一架构上交叉构建应用程序的说明。

性能对比

使用一个Micronaut应用程序来测量在JVM上运行与在RISC-V上运行原生镜像的性能差异。JVM的启动时间约为9300毫秒,而原生镜像的启动时间约为300毫秒。

LLVM后端的支持与未来发展

基于Linux的RISC-V Native Image LLVM后端可以在GraalVM CE开发构建中找到。LLVM后端支持其他后端的大部分功能,但缺少对macOS和其他操作系统的支持。未来还可以通过使用RISC-V特定功能进行优化。RISC-V的实现仅用了六个月,团队正在考虑评估其他环境,如WebAssembly。

反馈与交流

GraalVM在线上发布了完整的文章,并提供了通过Twitter、Mastodon、GitHub或Slack提供反馈的渠道。

阅读 54
0 条评论