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

本文调研了Maxine-VM在RISC-V架构上的支持情况,包括其在Fedora 31 (on QEMU)上的搭建和测试。Maxine-VM是一个元循环Java虚拟机,依赖QEMU在RISC-V上运行。文章详细介绍了如何构建和运行Maxine-VM,包括环境配置、依赖安装、镜像生成以及在RISC-V虚拟机中的执行。
摘要由CSDN通过智能技术生成

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

简介

Maxine VM是一个几乎全部以Java代码实现(只有用于启动Java虚拟机的加载器使用C语言编写)的元循环Java虚拟机。

这个项目于2005年开始,到现在仍然在发展之中,它有先进的即时编译器和垃圾收集器,可在宿主模式或独立模式下执行,其执行效率已经接近HotSpot虚拟机Client模式的水平。后来有了从C1X编译器演进而来的Graal编译器的支持,就更加如虎添翼,执行效率有了进一步飞跃。

Graal编译器现在已经是HotSpot的默认组件,是未来代替HotSpot中服务端编译器的希望。

状态

Maxine VM团队正在RISC-V上开发和测试Maxine VM的环境,目前依靠QEMU处理器仿真器在其上运行Maxine VM。架构操作系统Boot Java版本MaxineVM版本

RISC-V64Fedora 31 (on QEMU)OpenJDK8 (u222)2.9.0

解释器和编译器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执行中:

export WORKDIR=/home/linux/opt/maxine-src # Modify this line

sudo apt-get install python # MX depends on python

mkdir -p $WORKDIR

cd $WORKDIR

git clone https://github.com/graalvm/mx

export PATH=$PATH:$(pwd)/mx

Maxine还依赖于openJDK8,要从ubuntu存储库中获取它,请运行:

sudo apt-get install openjdk-8-jdk

为了构建maxine,我们首先需要定义许多环境变量:定义要使用的目录:

export WORKDIR=$WORKDIR # Modified last step

定义要使用的JDK:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

定义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.riscv64java-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!");

}

}

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值