关于操作系统:独家首发openEuler-主线集成-LuaJIT-RISCV-JIT-技术

0次阅读

共计 1424 个字符,预计需要花费 4 分钟才能阅读完成。

RISC-V SIG 预期随主线公布的 openEuler 23.09 翻新版本会集成 LuaJIT RISC-V 反对。本次发版将提供带有残缺 LuaJIT 反对的 RISC-V 环境并带有相干软件如 openResty 等软件的反对。

随着 RISC-V SIG 主线推动工作的停顿,LuaJIT 和相干软件在 RISC-V 架构下的反对也被合入到 openEuler 主线代码中。这标记着,openEuler 将成为首个在主线分支为 LuaJIT 提供 RISC-V 架构反对的支流发行版。

LuaJIT 的劣势与特点

LuaJIT 是一个高效的 Lua5.1 实现,有高效的解释器与优雅的即时编译引擎,领有相较原版 Lua5.1 均匀数倍的性能,不仅如此,它也有诸如 FFI、Bitop 扩大和局部 Lua 高版本的个性。基于以上起因,LuaJIT 被宽泛应用,成为了事实上的 Lua5.1/5.2 运行时。

LuaJIT RISC-V 我的项目背景

LuaJIT RISC-V(简称 LJRV)是将 LuaJIT 移植到 64 位 RISC-V 平台上的我的项目,旨在为 RISC-V 平台提供一个高效的 Lua 运行时,让依赖 LuaJIT 的我的项目在 RISC-V 平台上也能无障碍运行。此前,相干工作在国内外各个开源发行版平台依然属于技术空白。

技术挑战与工作进展

因为 LuaJIT 的外围局部应用汇编编写,移植到不同指令集平台中的复杂性很大。尤其是 LuaJIT 的 JIT 局部不依赖于如 LLVM 的通用编译框架,此前仅在 x86、ARM 等平台实现移植,而 RISC-V 指令集的移植工作尚未开始,大量依赖 LuaJIT 的软件包在 RISC-V 架构的各个发行版上或无奈运行,或只能应用低速的原版 Lua5.1。

目前,中科院软件所胜利移植了 LuaJIT 的大部分性能,包含 DynASM 动静汇编器,解释器运行时和 RISC-V 后端,现已通过 PUC Lua5.1 回归测试与 LuaJIT 回归测试。同时,能够在 RISC-V 64 平台上运行依赖 LuaJIT 的程序有 Sysbench,Neovim,OpenResty,LÖVE 等。已知存在的问题是 Unwinding 性能尚未充沛移植,JIT 可能会呈现一些未知的 bug。待相干工作实现与修复后,工程会进一步合入上游。

另外在 openEuler 主线上,一些依赖 luajit 的包,都是深度集成模式的,如 openResty,wrk 等,移植工作须要进行进一步适配。

合入 openEuler 主线

基于 LuaJIT 的移植成绩,RISC-V SIG 打包了相干 patch 并且合入了 openEuler 的 LuaJIT master 分支。这意味着从行将公布的 openEuler 23.09 翻新版本开始,openEuler 将原生反对 RISC-V 平台的 LuaJIT 以及相干生态软件包,这将是首个在主线分支为 LuaJIT 提供 RISC-V 架构反对的支流发行版。

同时,在 LuaJIT 开发工作的根底上,RISC-V SIG 也为 openResty 等 LuaJIT 强依赖的软件包提供了相应的反对,目前已合入主线。下图是依赖 LuaJIT 的开源游戏 Minetest 的运行演示图,基于的环境是 openEuler RISC-V 平台和 Unmatched 开发板。依据用户测试反馈,游戏画面晦涩,操作提早低。

性能比照及后果展现

咱们在 VisionFive 2 和 LicheePi 4A 上别离应用 PUC Lua5.1、LJRV 敞开 JIT、LJRV 开启 JIT,运行了 Lua-Benchmarks。在 TH1520 和 JH7110 环境的后果如下:

正文完
 0