RISC-V中开发Java是一种什么体验?

文/郑孝林
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。
02alibaba 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 以供演示用。
我们可以在实际的物理开发板上启动 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 架构有着光明的前景。


关于智能城市所拥有的机遇分析和介绍
RAPIDS cuML中的输入输出可配置性
全球制造业亮红灯 下半年“宽松潮”来势更猛?
关于USB充电的详细解析
高增益波导缝隙定向天线设计及测试结果
RISC-V中开发Java是一种什么体验?
汽车产业转型升级:腾讯正研发车载微信 阿里组建汽服新零售
[esp32教程]2、按键中断
火狐Firefox 84浏览器原生支持苹果M1 Mac:启动速度快 2.5 倍
详细解读蓝牙mesh网络技术及基本概况
基于Arria 10 SoC的控制模块设计和开发注意事项
工业以太网与现场总线技术都具有哪些优缺点,详细介绍
JL3633是一款多通道电平转换芯片内部集成了六通道独立的电平转换和驱动电路
乘风破浪 | 软通动力子公司助力“中国芯”振翅高飞
年轻人喜欢的空气啥样? Leader智慧空气场景,增幅47%
今年锂价已下跌75% 汽车厂商或改变策略
100%代码覆盖率分析是否必不可少
电子显微术(Electron Microscopy,EM)
小米6、努比亚Z17、OPPO F3都玩双摄,谁更强?
魅族新机入网,不配备充电器