写了一个高性能 RISC-V JIT 模拟器

2023-01-16 13:56:40 +08:00
 ksco

[前情提要] https://v2ex.com/t/861895

上次写了一个全系统的 RISC-V 模拟器,可以运行 xv6 ,但因为没有做任何优化,实际的性能很差。这次又整了个新活,写了一个 Linux 用户态程序模拟器,可以运行静态链接的 RISC-V 程序。

这次是用 JIT 技术来实现的,检测到热点代码后会编译成 native 的代码来执行,性能还是不错的。绝大部分场景下都比 QEMU 快,而且是快很多。

地址: https://github.com/ksco/rvemu

2230 次点击
所在节点    分享创造
12 条回复
xieren58
2023-01-16 14:04:34 +08:00
c 换成 rust 会更好点...
ksco
2023-01-16 14:55:27 +08:00
@xieren58 就目前来说 C 的受众还是更广一些。
roycestevie6761
2023-01-16 18:12:15 +08:00
@xieren58 为啥?
roycestevie6761
2023-01-16 18:15:52 +08:00
start 了,支持一下
favourstreet
2023-01-16 19:13:39 +08:00
点进去看了一下 makefile ,发现没有链接 llvm ,心想 2023 年了,写 jit 不用 llvm ,楼主技术可以啊!
然后点搜索,搜 mmap ,原来文件名叫缓存。
继续看代码,发现编译方式是把 rv 机器码翻译成等价的 c 语言程序,然后启动一个 clang ,把拼起来的 c 语言字符串送给 clang ,好吧,到底还是用了 llvm 。

楼主,你这 jit 让我有点失望啊!要是我的电脑里没安装 clang 怎么办?
duke807
2023-01-16 19:22:53 +08:00
linux 用户态运行其它架构程序有标准且好用的框架,查关键词:

/proc/sys/fs/binfmt_misc/register

gentoo chroot binfmt_misc
ksco
2023-01-16 19:34:06 +08:00
@duke807 binfmt 只是个虚拟机的 wrapper 。
pursuer
2023-01-16 19:44:54 +08:00
我也写过一个 webassembly 的 jit 运行环境,没用 llvm ,用的是更简单的 sljit 。感兴趣的可以看看

https://github.com/partic2/pwart
https://gitee.com/partic/pwart


@favourstreet
有一些简单的库可以做 jit ,像上面提到的 sljit ,还有 gnu lighting 啥的,不过性能优化啥的应该是比不过专业级的 llvm
ksco
2023-01-16 20:03:40 +08:00
@favourstreet 不是很想碰 LLVM API 那一大坨东西呀
ksco
2023-01-16 20:08:22 +08:00
@pursuer 不带优化的 JIT 挺慢的,你可以把你的虚拟机和 V8 做个 benchmark 对比看看。
xieren58
2023-01-17 11:47:17 +08:00
@roycestevie6761 换 rust, 更容易推广... 看起来现代化点.
wslzy007
2023-01-18 09:48:54 +08:00
@ksco 不错,简洁易懂。已 start

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/909253

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX