SFC2020
SFC2020 管理员

546枚
铜币

671点
威望

0个
银元

【Java on RISC-V】Maxine-VM对于RISC-V的支持进展调研与搭建测试

2020-09-18 11:32

1820

本文是根据Maxine-VM官方文档对于RISC-V的支持进展进行的调研与在Fedora(on QEMU)虚拟机上的搭建测试

状态
Maxine VM团队正在RISC-V上开发和测试Maxine VM的环境,目前依靠QEMU处理器仿真器在其上运行Maxine VM。

 

图片:微信截图_20200918111251.png



解释器和编译器
  • Maxine不含解释器(interpreter),它声称使用非常快速的基准编译器。请参阅T1X编译器。
  • Maxine提供了两个优化的编译器,C1X和Graal。前者是Hostpot客户端编译器(C1)的演进,官方文档中宣称非常稳定,但不再开发。Graal更类似于Hotspot服务器编译器(C2),并且正在积极开发和改进。默认映像构建仍将C1X用作优化编译器,但是可以选择Graal,用于运行时编译和VM引导映像(后者目前是不稳定的)。要将Graal作为运行时优化编译器来构建启动映像:
mx image @c1xgraal
  • 在这种情况下,优化编译器实际上是C1X和Graal的混合体,如果Graal编译失败,则将C1X用作备用选项。请注意,包括Graal在内,VM启动映像要大得多(大约100MB)。要使用Graal编译引导映像本身:
mx image @c1xgraal-boot
 
mx是一种用于管理Java代码开发的命令行工具。
 
尝试在Fedora(on QEMU)上运行Maxine-VM
 
假定Ubuntu版本至少为16.04,并且已搭建好交叉编译环境和Fedora (on QEMU)。
 
Maxine-VM通用的生成和使用说明
 
Maxine 的构建过程依赖于MX工具。要获取它并将其添加到您的PATH执行中:

 

图片:微信截图_20200918111326.png



Maxine还依赖于openJDK8,要从ubuntu存储库中获取它,请运行:
sudo apt-get install openjdk-8-jdk
 
为了构建maxine,我们首先需要定义许多环境变量:
1. 定义要使用的目录:
export WORKDIR=$WORKDIR # Modified last step
2. 定义要使用的JDK:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
3. 获取Maxine VM源代码:
git clone --recursive https://github.com/beehive-lab/Maxine-VM.git maxine
4. 定义MAXINE_HOME:
export MAXINE_HOME=$WORKDIR/maxine
 
构建与RISC-V兼容的Maxine VM镜像
需要完成上述的Maxine-VM通用的生成和使用说明,并且根据实际的环境配置修改CC参数
mx clean
CC=riscv64-unknown-linux-gnu-gcc TARGETISA=riscv64 mx build
mx image -platform linux-riscv64
这样就会在$WORKDIR/maxine/com.oracle.max.vm.native下生成所需要的VM镜像
 
在Fedora RISC-V VM上运行Maxine VM
现在需要将生成的图像复制到QEMU中运行的Fedora RISC-V VM:
scp -P 3333 -r /home/linux/opt/maxine-src/maxine/com.oracle.max.vm.native root@localhost:~/
 
之后步骤都是在Fedora虚拟机中进行,在进入下面的步骤之前,需要安装java-1.8.0-openjdk:
dnf install java-1.8.0-openjdk-devel.riscv64
 
java-1.8.0-openjdk.riscv64 : OpenJDK Runtime Environment 8 (only include jre)
java-1.8.0-openjdk-devel.riscv64 : OpenJDK Development Environment 8
后者名称中包含jdk实际安装后发现只含有jre,因此需要安装前者
 
之后可以在Fedora虚拟机运行Maxine VM:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
Export LD_LIBRARY_PATH=/home/riscv/maxine-src/maxine/com.oracle.max.vm.native/generated/linux

/home/riscv/maxine-src/maxine/com.oracle.max.vm.native/generated/linux/maxvm本质上可以相当于命令java。

HelloWorld测试

HelloWorld.java:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("HelloWorld!");
}
}


 

图片:微信图片_20200918113056.png



在RISC-V上尝试用Maxine VM的HelloWorld部分暂时告一段落

(补充)使用docker搭建Maxine VM开发环境
官方构建文档对于构建过程已经描述的足够详细,这里补充一下实际构建过程中遇到的几个问题


. 执行sudo docker-compose up --no-start提示
ERROR: Volume maxine-dev-mx-sync declared as external, but could not be found.
Please create the volume manually using `docker volume create --name=maxine-dev-mx-sync` and try again.
解决方法:根据提示执行
sudo docker volume create --name=maxine-dev-mx-sync


. 执行sudo docker-compose up --no-start提示
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running? 主要原因是docker不是系统服务方式启动。

解决方法: 1、启动docker服务 service docker start 2、生成自启动服务 systemctl enable docker.service 3、查看服务状态,Active状态为:active(running) systemctl status docker.service
 
本文源自知乎,转载目的在于传递更多信息,版权归原作者所有。


返回顶部