当前位置:首页 > 报告详情

19-章子杨.pdf

上传人: 山哈 编号:725344 2025-07-04 32页 1.83MB

1、QEMU 调用本机动态库加速转译上海交通大学 章子杨RISC-V Summit China1研究背景转译工具的需求与现状2转译工具的需求3x86_64riscv64垄断APP?转译工具的研究开发已是大势所趋!现有的转译工具4Apple Rosetta 2QEMUWindows On ArmBox64BlinkenlightsHuawei ExaGearFex-Emu统统闭源各有所长5研究现状动态翻译具有更高的灵活性与用户体验,是主流选择。动态二进制翻译器,备受关注的指标主要有执行效率、兼容性。在现有的二进制翻译相关的学术研究与工程实现中,大部分优化措施,都集中在优化翻译规则上。源架构指令IR目

2、标架构指令x86_64riscv64TCGMapJIT探索新的转译流程6完全模拟部分模拟痴于在“翻译规则”之窠臼中上下求索将“物尽其用”思想贯彻到底我是 riscv64 的x86_64 源程序x86_64 源程序以 x86_64 翻译到 riscv64 为例现状是,有些库是无法模拟的,如包含 CUDA 指令的动态库。还有很多库是开源的,如 OpenGL、SDL,每个平台都能编译。内存内存基本方案使用本机动态库加速的基本方案(以 Box64 为例)7本机优势8例:做一个矩阵乘法,如果“乘法”代码来自 Native 动态库,显然速度更快,因为充分发挥了本机的向量化优势,也没有转译开销。mainli

3、bmatrix.so效率优势:执行相同的逻辑,本地机器码直接执行比转译快得多 兼容性优势:支持 CUDA 指令、驱动指令等利用本地动态库的可行性9libc.somain模拟 x86_64 地址空间libmatrix.solibmatrix.somatrix_mul.pltprintf.pltint 30 x4010matrix_mul(impl)printf(impl)matrix_mul.wrapper0 x4010riscv64 地址空间以 Box64 为例核心问题使用本机动态库加速的核心问题(以 Box64 为例)10核心问题1.访存 对于同一个内存地址,Guest 与 Host 访问必

4、须能获取到完全相同的数据11核心问题-访存12条件 1:Guest 的地址空间映射,不存在偏移量。sample.soNative 库访问 Guest 地址,访问到的必须是正确的值。.data.rodata.textdouble b=50 x8010(H)0 x4010(G)核心问题-访存13条件 2:动态库的所有导出变量与函数参数中,不存在字段随架构变化的结构体X86_64riscv64%rdi:s%rdi+8:s-ba0:sa0+16:s-b核心问题1.访存 对于同一个内存地址,Guest 与 Host 访问必须能获取到完全相同的数据2.函数调用 Guest 代码调用 Host 函数时,Ho

5、st 函数能正确地取出参数,之后 Guest 代码能正确地获取返回值14核心问题-函数调用15条件 3:调用约定能被正确转换mainmatrix_mul.pltint 30 x4010matrix_mul.wrapperlibmatrix.so陷阱解包转发模拟 x86_64 地址空间riscv64 地址空间调用陷入包装器核心问题1.访存 对于同一个内存地址,Guest 与 Host 访问必须能获取到完全相同的数据2.函数调用 Guest 代码调用 Host 函数时,Host 函数能正确地取出参数,之后 Guest 代码能正确地获取返回值3.函数指针 Guest 代码传递一个 Guest 函数指

6、针给 Host 函数,Host 函数进行回调时,控制流能正确地回到 Guest 中16核心问题 函数指针17条件 4:函数指针能被正确处理mainqsort.pltint 30 x4010qsort.wrapperlibqsort.so陷阱解包转发模拟 x86_64 地址空间riscv64 地址空间调用陷入包装器核心问题1.访存 对于同一个内存地址,Guest 与 Host 访问必须能获取到完全相同的数据2.函数调用 Guest 代码调用 Host 函数时,Host 函数能正确地取出参数,之后 Guest 代码能正确地获取返回值3.函数指针 Guest 代码传递一个 Guest 函数指针给 H

word格式文档无特别注明外均可编辑修改,预览文件经过压缩,下载原文更清晰!
三个皮匠报告文库所有资源均是客户上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作商用。
本文主要研究了在RISC-V架构上通过转译工具运行x86_64程序的需求与现状。关键点如下: 1. 转译工具需求:现有工具如QEMU、Rosetta 2等闭源且各有局限,研究新型转译工具成为趋势。 2. 转译流程:提出优化访存、函数调用、函数指针等核心问题,以实现更高效的转译。 3. 本机动态库加速:利用本机动态库可显著提升执行效率和兼容性,如Box64方案。 4. 核心数据:实验以FFmpeg为例,QEMU-NC方式处理WAV转WAV时间仅需3.06倍于Native,而QEMU方式需8.93倍;MP3转换中,QEMU-NC耗时1.06倍于Native,QEMU则高达14.34倍。 5. 方案设计:基于QEMU,实现调用本地动态库,自动化生成包装器,提高可维护性和可自动化程度。 综上,文章探讨了在RISC-V上高效转译x86_64程序的途径,并通过实验验证了本机动态库加速的优越性。
"QEMU加速转译如何实现?" "Box64的优缺点有哪些亮点?" "riscv64如何高效运行x86_64程序?"
客服
商务合作
小程序
服务号
折叠