V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ksco
V2EX  ›  分享创造

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

  •  
  •   ksco · 2023-01-16 13:56:40 +08:00 · 2193 次点击
    这是一个创建于 678 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    12 条回复    2023-01-18 09:48:54 +08:00
    xieren58
        1
    xieren58  
       2023-01-16 14:04:34 +08:00
    c 换成 rust 会更好点...
    ksco
        2
    ksco  
    OP
       2023-01-16 14:55:27 +08:00
    @xieren58 就目前来说 C 的受众还是更广一些。
    roycestevie6761
        3
    roycestevie6761  
       2023-01-16 18:12:15 +08:00
    @xieren58 为啥?
    roycestevie6761
        4
    roycestevie6761  
       2023-01-16 18:15:52 +08:00
    start 了,支持一下
    favourstreet
        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 怎么办?
    duke807
        6
    duke807  
       2023-01-16 19:22:53 +08:00 via Android
    linux 用户态运行其它架构程序有标准且好用的框架,查关键词:

    /proc/sys/fs/binfmt_misc/register

    gentoo chroot binfmt_misc
    ksco
        7
    ksco  
    OP
       2023-01-16 19:34:06 +08:00
    @duke807 binfmt 只是个虚拟机的 wrapper 。
    pursuer
        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
    ksco
        9
    ksco  
    OP
       2023-01-16 20:03:40 +08:00
    @favourstreet 不是很想碰 LLVM API 那一大坨东西呀
    ksco
        10
    ksco  
    OP
       2023-01-16 20:08:22 +08:00
    @pursuer 不带优化的 JIT 挺慢的,你可以把你的虚拟机和 V8 做个 benchmark 对比看看。
    xieren58
        11
    xieren58  
       2023-01-17 11:47:17 +08:00
    @roycestevie6761 换 rust, 更容易推广... 看起来现代化点.
    wslzy007
        12
    wslzy007  
       2023-01-18 09:48:54 +08:00   ❤️ 1
    @ksco 不错,简洁易懂。已 start
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2744 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:12 · PVG 18:12 · LAX 02:12 · JFK 05:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.