为什么同样是手机模拟 x86 windows, QEMU 和 ExaGear 性能差距如此之大? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tool2d
V2EX    Android

为什么同样是手机模拟 x86 windows, QEMU 和 ExaGear 性能差距如此之大?

  •  1
     
  •   tool2d 2022-10-08 09:25:40 +08:00 16637 次点击
    这是一个创建于 1099 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 B 站看到测评,有人用 ExaGear 运行街霸 4 PC 版,很完美,心想那么多年过去了,QEmu 也应该有长足进步。

    https://www.bilibili.com/video/BV1pL411P71L/

    于是昨晚测试了一下,结果大跌眼镜,别说硬件加速的游戏了,正常软件都卡的不行,几分钟启动 windows ,勉强打开 chrome ,完全没有用户体验,和 ExaGear 基本一个天,一个地。

    跑了一下 SuperPI CPU 测试,同一台手机上,ExaGear 运行只需要 1 分钟,而 QEMU 2022 年开了最强 JIT 加速 TCG 后,需要 20 分钟,几乎有 20 倍的差距。

    31 条回复    2022-10-09 18:22:45 +08:00
    xuan_lengyue
        1
    xuan_lengyue  
       2022-10-08 09:45:13 +08:00
    一个是 WINE ,一个是模拟器,肯定不一样的。
    有些 QEMU 能做的事 WINE 做不了。
    tool2d
        2
    tool2d  
    OP
       2022-10-08 09:52:04 +08:00
    @xuan_lengyue 不是啊,ExaGear 转译 x86 指令又不是 Wine 负责。

    Wine 只是能翻译 windows Api ,比如 D3D ,让其以更快的速度运行。
    podel
        3
    podel  
       2022-10-08 10:07:02 +08:00
    很多 Windows API 都能转成 ARM 原生指令集?
    tool2d
        4
    tool2d  
    OP
       2022-10-08 10:15:22 +08:00
    @podel ExaGear 有两个模块,一个是把 x86 指令转成 arm 指令。

    另一个模块是 wine ,负责模拟 windows api 环境。后者和 ExaGear 关系不大,是开源社区在维护的。

    也不是所有指令都能翻译,游戏用到了 AVX 指令就没办法翻译了。
    edimetia3d
        5
    edimetia3d  
       2022-10-08 10:16:03 +08:00
    mark. 我也很好奇. 有没有了解的同学?

    感觉 qemu 应该是一个虚拟机, 会有一个 loop 来 dispatch instruction?
    exagear 这样的方案应该是动态转译指令,然后直接 JIT 的用 native CPU 来跑?
    0o0O0o0O0o
        6
    0o0O0o0O0o  
       2022-10-08 10:18:27 +08:00 via iPhone
    关于为什么比 QEMU 快,应该能在这里找到一些看起来合理的类似产品的解释:
    https://www.zhihu.com/question/48522805

    至于 Android 上的 QEMU 如何快起来应该可以看这里:
    https://twitter.com/kdrag0n/status/1492712401262710784
    podel
        7
    podel  
       2022-10-08 10:21:04 +08:00
    ExaGear 应该跟 ARM 版本的 Windows 10/11 差不多。
    正常的程序 其实内部有很多的 Windows 系统调用的。
    直接 QEMU 的话,所有的 Windows API 都是 ARM 模拟的所以慢。
    但是一部分 计算用翻译,WIN API 换成原生 ARM 这样速度就会快很多。
    速度上 应该是 原生 X86WIN > Windows on ARM >= ExaGear > 纯 QEMU
    mxT52CRuqR6o5
        8
    mxT52CRuqR6o5  
       2022-10-08 11:15:07 +08:00
    qemu 里跑 superpi ,隔着一层操作系统,我对 jit 能做到多少效果表示怀疑
    ExaGear 里跑的话,理论上 jit 可以直接感知到程序,能更好的 jit
    ysc3839
        9
    ysc3839  
       2022-10-08 13:04:09 +08:00 via Android
    你测试 qemu 是跑完整系统?没有经过 Wine ?那没有可比性呀,都没做到控制变量。
    Red54
        10
    Red54  
       2022-10-08 14:10:31 +08:00
    ExaGear 没有运行完整系统,要对比的话应该用 QEMU 的用户模式( User Mode )运行 X86 的 WINE 来对比。
    flynaj
        11
    flynaj  
       2022-10-08 14:41:44 +08:00   1
    qemu TCG 是最慢的 性能顺序 kvm, xen, hax, hvf, nvmm, whpx ,tcg
    tool2d
        12
    tool2d  
    OP
       2022-10-08 15:24:32 +08:00
    @ysc3839 昨晚测试的时候,用 Qemu 跑了三个 x86 系统,分别是 WinPE, TinyCoreLinux, WinXP 。

    其中 WinXP 速度最快,Linux 最慢,原因不明。因为运行实在太慢,就没进一步测试 wine 了。

    感觉 super pi 就是浮点运算,也没涉及太多的图形和系统 API ,所以觉得 wine 这个变量影响应该不会太大。
    tool2d
        13
    tool2d  
    OP
       2022-10-08 15:26:28 +08:00
    @flynaj 我不开 TCG ,裸奔速度更慢。开了至少快那么一丢丢。

    谁能给一个能运行的 arm 版本 qemu-kvm 就好了。
    7c00
        14
    7c00  
       2022-10-08 16:14:08 +08:00
    我这里提供一个案例,termux 里跑 solc 编译任务。

    原生不到 100ms:


    qemu user mode 运行 x86 要 800ms:
    7c00
        15
    7c00  
       2022-10-08 16:23:59 +08:00
    这是 fish 的 time ,看走眼了,原生是 200 多 ms ,看起来差距也不是特别大
    kkocdko
        16
    kkocdko  
       2022-10-08 17:07:57 +08:00
    也许可以推断出楼主对现代虚拟化技术栈很不熟悉。
    tool2d
        17
    tool2d  
    OP
       2022-10-08 18:11:16 +08:00
    @7c00 我也试了一下用 usermode 来运行 superpi, 从结果来看,x86 elf 运行速度比 windows exe 还要慢。

    看来 qemu 的 system mode 和 user mode 区别,仅仅只是环境而已。

    而且 usermode 不能启用 tcg 加速?那真的是裸奔上阵,超勇。

    secondwtq
        18
    secondwtq  
       2022-10-08 22:21:02 +08:00
    不建议只跑一个 benchmark 。
    zhhww57
        19
    zhhww57  
       2022-10-09 01:02:20 +08:00
    是用的 qemu-static-i386? 你试试看这样,本地运行个 x server ,然后用 qemu-static-i386 运行一下 x86 的 wine ,图形界面会连 x server ,测一下
    Red54
        20
    Red54  
       2022-10-09 11:04:07 +08:00
    Red54
        21
    Red54  
       2022-10-09 11:06:23 +08:00
    tool2d
        22
    tool2d  
    OP
       2022-10-09 11:34:30 +08:00
    @Red54 你这好像不是 qemu 呢,是手机内部直接转译的吧?类似安卓 x86 电脑模拟器运行 arm 程序一样。
    Red54
        23
    Red54  
       2022-10-09 12:06:30 +08:00
    @tool2d 我这是 ARM 服务器,用的就是 QEMU 用户模式,我没见过哪台 ARM 手机集成有 X86 转译的。
    tool2d
        24
    tool2d  
    OP
       2022-10-09 12:31:38 +08:00
    @Red54 贴图看起来 arm 服务器效率很好,性能基本和 exagear 持平了。

    不知道是不是我调用的 qemu-i386 elf 姿势的问题,在安卓手机上巨慢。
    Red54
        25
    Red54  
       2022-10-09 14:12:24 +08:00


    顺便测试一下 QEMU 用户模式运行 RISC-V ( riscv64 )、PowerPC ( ppc64el )和 S/390 ( s390x )的性能。
    tool2d
        26
    tool2d  
    OP
       2022-10-09 14:22:40 +08:00
    @Red54 强烈怀疑这台机器配置了 arm 版本的 kvm ,你看看有没有 /sys/module/kvm 目录呢?

    用户模式运行速度也太快了。

    我用别人编译版本的 qemu-i386 ,什么加速参数都加不了,就非常卡顿。
    Red54
        27
    Red54  
       2022-10-09 14:41:29 +08:00
    @tool2d QEMU 用户模式与 KVM 无关,看来这位老哥 @kkocdko 说得对,你对虚拟化不是很熟悉。
    tool2d
        28
    tool2d  
    OP
       2022-10-09 15:08:58 +08:00
    @Red54 QEMU 的纯 CPU 软件模式能跑那么快?我不信啊。

    一点没硬件加速的 QEMU ,运行比蜗牛还慢。但是只有 KVM/HAXM ,那就是本质的飞跃。

    近期有国产的 ARM 芯片,就是用到了 KVM ,理论上速度应该和你贴图差不多。
    tool2d
        29
    tool2d  
    OP
       2022-10-09 17:21:35 +08:00
    @Red54 我是骁龙 870 安卓平板,正常计算 pi ,速度很快。

    但为什么一调用 qemu 用户模式,计算速度就异常缓慢呢?

    5 倍速度之内我才能接受,这也太慢了吧,运行 1 秒变成了 45 秒。


    kkocdko
        30
    kkocdko  
       2022-10-09 17:58:55 +08:00
    @Red54 流行的几款移动端 ARM 芯片似乎都阉割了很多虚拟化特性,完整 KVM 支持应该只有 Google Tensor ?我记不清了。

    总之我觉得这帖子下面有很多讨论都是风马牛不相及。建议楼主可以搜一下相关资料,先对各种概念一个初步的认识之后,再去探索。而不是这样一股脑使劲实验然后瞎猜。
    tool2d
        31
    tool2d  
    OP
       2022-10-09 18:22:45 +08:00
    @kkocdko 实验出来的,才是真理啊。

    我对 qemu 还是很有好感的,加了 kvm 的 linux host 运行飞快,加了 hax 的 window host 运行飞快,唯独加了 tcg 的 android host ,卡到不能自理。

    至于用户模式我也无感,就暂且当一个动态 JIT 吧,但我主要目的还是运行 EXE ,没 DX 环境模拟也没戏。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6094 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:21 PVG 10:21 LAX 19:21 JFK 22:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86