[前情提要] https://v2ex.com/t/861895
上次写了一个全系统的 RISC-V 模拟器,可以运行 xv6 ,但因为没有做任何优化,实际的性能很差。这次又整了个新活,写了一个 Linux 用户态程序模拟器,可以运行静态链接的 RISC-V 程序。
这次是用 JIT 技术来实现的,检测到热点代码后会编译成 native 的代码来执行,性能还是不错的。绝大部分场景下都比 QEMU 快,而且是快很多。
1
xieren58 2023-01-16 14:04:34 +08:00
c 换成 rust 会更好点...
|
3
roycestevie6761 2023-01-16 18:12:15 +08:00
@xieren58 为啥?
|
4
roycestevie6761 2023-01-16 18:15:52 +08:00
start 了,支持一下
|
5
favourstreet 2023-01-16 19:13:39 +08:00 via Android 1
点进去看了一下 makefile ,发现没有链接 llvm ,心想 2023 年了,写 jit 不用 llvm ,楼主技术可以啊!
然后点搜索,搜 mmap ,原来文件名叫缓存。 继续看代码,发现编译方式是把 rv 机器码翻译成等价的 c 语言程序,然后启动一个 clang ,把拼起来的 c 语言字符串送给 clang ,好吧,到底还是用了 llvm 。 楼主,你这 jit 让我有点失望啊!要是我的电脑里没安装 clang 怎么办? |
6
duke807 2023-01-16 19:22:53 +08:00 via Android
linux 用户态运行其它架构程序有标准且好用的框架,查关键词:
/proc/sys/fs/binfmt_misc/register gentoo chroot binfmt_misc |
8
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 |
9
ksco OP @favourstreet 不是很想碰 LLVM API 那一大坨东西呀
|
11
xieren58 2023-01-17 11:47:17 +08:00
@roycestevie6761 换 rust, 更容易推广... 看起来现代化点.
|