乐趣区

关于risc-v:RISCV-中开发-Java-是一种什么体验-让-Dragonwell-JDK-来回答

01 背景介绍

1.Alibaba Dragonwell 发行版

Alibaba Dragonwell [1] 是一款收费的 OpenJDK 发行版。它提供了长期反对,包含性能加强、平安修复以及 Dragonwell 上专有的一些个性,比方 Wisp 协程、多租户、JWarmup、G1 elastic heap 以及 serviceability 上的个性 [2] 等等。Dragonwell 包含 8、11、17 三个版本,而每个版本又包含 standard (和 OpenJDK 根本保持一致) 和 extended (基于 OpenJDK,搭载了 Dragonwell 的各种专有个性) 两个子版本。而咱们以后介绍的 RISC-V 后端反对是在 Dragonwell11 上的 extended 版本上,已在 2023 年 2 月正式 release,其中 Dragonwell11 上的个性如 Wisp 临时还不反对。

2.RISC-V 指令集架构

RISC-V [3] 是一个基于 RISC (精简指令集) 的指令集架构。它次要的个性是开源、模块化、可扩展性以及十分精简的指令集。以后的 RISC-V 次要利用于物联网;而后续进入服务器畛域也是将来可期的。同时,失去 Arm 等商业芯片指令集的受权都须要领取高额的商业费用,而 RISC-V 是齐全开源的指令集架构,芯片厂商能够依据本人的须要做定制化。以后的商业 RISC-V 处理器有如 Alibaba 玄铁 C910 处理器、SiFive 的 RISC-V 半导体 IP 核等。从开发的角度而言,它们也都是应用体验很好的处理器 / 设施。

3.OpenJDK on RISC-V

在 2020 年的年末,华为的 Bisheng JDK 团队开源了基于 OpenJDK 的 RISC-V (64 位) 后端实现,约 6w 行代码的 initial load [4]。Alibaba Dragonwell 团队也同期参加到了 RISC-V 后端研发当中。从 Alibaba Dragonwell 团队的角度,在去年社区成立 openjdk/riscv-port repo [5],随后 RISC-V 后端正式合并到上游 openjdk/jdk repo [6] 到当初,咱们对 OpenJDK RISC-V 后端的奉献包含在 OpenJDK 上的 RISC-V “C” 压缩指令扩大这个个性的实现;20 余个 bug fixes;局部 enhancements 和 refactoring;以及局部 Loom (协程) RISC-V port 的反对等。其中 C 扩大的实现曾经在 OpenJDK 20 上的 RISC-V 后端中默认开启,能够减小 ~20% 的后端 Java compiled code 的 code size footprint。

02 Alibaba Dragonwell11 on RISC-V

为什么是 JDK11?

JDK11 是以后的支流版本。国内的 Java 客户大多都在应用 JDK8,但当初曾经有越来越多降级到 JDK11 的趋势了。默认的 G1 GC (CMS 在前面 JDK 版本中曾经弃用)、更好的性能、AArch64 后端更好的反对、AppCDS 个性、Safepoint 的 Threadlocal Handshake、能晋升代码性能的 Segmented Code Cache 个性等都能够让 JDK11 相比于 JDK8 有更多的劣势,也是用户降级 JDK 的能源所在。尽管 JDK11 确实是当下的支流版本,然而社区上的 RISC-V 后端是在 19/20 这两个版本中反对的,因而这对于很多 Java 利用的维护者来说,降级到这么高的版本确实是略有些边远且工作量颇高的事件。所以,如果要尝试在 RISC-V 上开发 Java 利用的话,能持续应用 JDK11 应该是一个比拟好的抉择。

硬件个性反对平头哥 RISC-V 芯片

因而,Alibaba Dragonwell 团队将 OpenJDK 上游的 RISC-V 后端移植回了 Dragonwell11 [7] 上,咱们会长期保护 Dragonwell11 的版本和后端,同步上游社区的 bug fixes 保障用户的应用体验。从兼容性的角度上讲,咱们实现了 QEMU / SiFive 开发板 / 平头哥开发板 上的验证,以及 JCK / jtreg / SPECjbb2015 等各种 benchmark 的反对。Dragonwell11 上的 RISC-V 和上游大部分保持一致;包含根底的 RVI 指令集反对的同时,咱们还反对一部分平头哥芯片专有的指令集和其生态,如果在平头哥的硬件上如 C910,则能够应用 -XX:+UseCSky 开启相干的反对。与此同时,咱们还反对一些基于 RVV(RISC-V 的向量指令扩大)-0.7.1 的 vector intrinsic 的向量化,在反对 RVV-0.7.1 版本的(如平头哥的一些 RISC-V 芯片,如开启 vector 反对的 C910 等)开发板上能够主动开启。因为搭载 RVV-1.0 版本的芯片现阶段实际上很少,所以 Dragonwell 可能是目前惟一可能在硬件上运行 RVV 的 JDK。

二进制版本下载

Dragonwell11 的二进制版本 [8] 曾经于二月份公布,有趣味的开发者能够间接从 Github 链接下载。此外,Dragonwell11 的 RISC-V 版本曾经集成进龙蜥的 Anolis 源中,如果是应用 Anolis OS 的用户能够间接应用 yum 源来装置 Dragonwell11 JDK。

使用方便的 QEMU Docker 容器镜像进行模仿

RISC-V 当初还在疾速倒退阶段中。因而面临着硬件资源无限的问题:开发者有时并不容易失去硬件设施;拿到硬件设施之后还面临着须要搭建环境、初始化网络等比拟麻烦的操作。在这种状况下,有一个模拟器就是十分有必要的了。支流的模拟器是 QEMU,如果把 QEMU 内置在 Docker 镜像当中,用户就能够失去最大水平上的应用便当:用户能够间接在 x86 机器上一键模仿 RISC-V 程序。并且,镜像是 portable 的:因为容器镜像能够随时迁徙到其余机器下来。咱们保护了一个 RISC-V QEMU Docker 镜像的仓库 [9],应用 Debian 的 RISC-V 源。用户能够间接查看 README 手动构建一个 QEMU Docker。省力一些的话,用户也能够间接将镜像 pull 下来:

# 现只反对 x86 宿主机

docker pull multiarch/qemu-user-static && \
docker run --rm --privileged --net host multiarch/qemu-user-static --reset

docker pull alibabadragonwelljdk/riscv-qemu && \
docker run -it --rm alibabadragonwelljdk/riscv-qemu /bin/bash

Demo:Springboot 示例

SpringBoot 是十分优良的 Java 利用框架,咱们能够从官网上 [10] 下载其 Hello World demo 并应用 maven 构建。

咱们也提供了一个预编译好的 SpringBoot demo 以供演示用:

https://dragonwell.oss-cn-shanghai.aliyuncs.com/demo-0.0.1-SN…

咱们能够在理论的物理开发板上启动 Java 程序;也能够在上述的 QEMU Docker 中用同样的命令启动:

图 / 启动一个简略的 SpringBoot Hello World 程序 (理论启动工夫可能与图片上有差异)

03 致谢

感激华为 Bisheng JDK 团队的开发同学们的工作,感激中科院软件所 PLCT 实验室团队对硬件设施方面给予的帮忙。感激社区 RISC-V 后端的 reviewers 的各种帮忙。咱们也会继续输入并一直反馈社区,在社区的保护上奉献咱们的力量。

04 总结和瞻望

RISC-V 是一个有前景的指令集,中立和凋谢是它的两大劣势。在成立了 Datacenter (数据中心) SIG 和 HPC (高性能计算) SIG 之后,RISC-V 也开始逐步向高性能方向逐步演进。除此之外,就 RISC-V 的软件生态而言,RISC-V 上的各种 toolchain (GCC、GDB 等) 的反对也曾经非常齐备,各种操作系统 (Ubuntu、Debian) 等都曾经反对了 RISC-V 指令集,各种开源社区对相干软件的移植的反对也十分踊跃。Debian-port 上大概 95% 的软件包都能够在 RISC-V 上应用 [11],因而用户的开发流程是比拟晦涩的。相比于 x86 平台的一些简单指令及一些历史包袱,RISC-V 具备着较新、指令集简略、较强的拓展性等个性,曾经 ratify 了多个指令集扩大。随着社区的蓬勃发展,咱们置信 RISC-V 架构有着光明的前景。

相干链接:

[1] https://dragonwell-jdk.io/

[2] https://github.com/dragonwell-project/dragonwell8/wiki/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Dragonwell8%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97

[3] https://en.wikipedia.org/wiki/RISC-V

[4] https://mail.openjdk.org/pipermail/discuss/2020-December/0056…

[5] https://github.com/openjdk/riscv-port

[6] https://github.com/openjdk/jdk

[7] https://github.com/dragonwell-project/dragonwell11

[8] https://github.com/dragonwell-project/dragonwell11/releases

[9] https://github.com/dragonwell-project/docker-qemu-riscv64

[10] https://start.spring.io/

[11] https://wiki.debian.org/RISC-V

文 / 郑孝林

原文链接

本文为阿里云原创内容,未经容许不得转载。

退出移动版