基于静态寄存器分配的系统仿真协同优化方法

来源:公文范文 发布时间:2022-11-27 10:31:10 点击:

摘要:针对X86系统仿真中基于静态寄存器分配的代码翻译机制导致的目标代码膨胀率高、翻译引擎和执行引擎间切换开销大两方面问题,提出了以寄存器映射、自定义指令和影子寄存器为基础的软硬协同优化方法。寄存器映射优化将对内存中模拟的源机器寄存器的操作转化为对本地机器寄存器操作,降低了翻译后目标代码膨胀率;自定义指令和影子寄存器优化将引擎切换时上下文的备份和恢复操作简化为2条自定义指令,提升了引擎切换效率。相比协同优化前,X86仿真系统Linux0.2的翻译后目标代码膨胀率降低了21.9%,开关机时间获得了1.35的加速比。测试结果表明了该协同优化方法对于提升系统仿真效率具有可行性和有效性。

关键词:系统仿真;协同优化;寄存器映射;自定义指令;影子寄存器

中图分类号:TP391.9

文献标志码:A

0引言

系统仿真(System Emulation)能够解决跨平台操作系统和软件的透明移植[1-3],使新型精简指令集处理器(Reduced Instruction Set Computing, RISC)能够得到快速的推广应用,因而近年来受到越来越多的关注。

QEMU(Quick Emulator)是一个基于动态二进制翻译的多源到多目标仿真器,能够仿真目标机器的用户态和系统态[4],其将目标寄存器固定地保存在本地内存中,代码翻译中大量使用临时变量,当翻译代码需对目标寄存器操作时,必须从内存中载入目标寄存器值或将寄存器值写回内存。显然这种方法导致了大量内存读写操作,降低了系统仿真效率。基于X86和ARM平台,文献[5]试图对QEMU中使用的寄存器策略进行改进,并对多种映射策略进行了对比实验,但翻译程序的性能提高微乎其微,根源在于其所使用的映射策略并没有有效降低对内存的访问频度。文献[6]以PowerPC到Alpha的系统仿真平台为基础,提出了分段映射和特殊寄存器功能剪裁相结合的方法,使翻译程序的性能得到了一定的提高,但对通用寄存器的映射关注较少。文献[7]以X86到龙芯MIPS(Microprocessor without Interlocked Piped Stages)平台的系统仿真为基础,映射使用频繁的EAX、ESP、EBP到龙芯s4、s5、s6寄存器,使基于X86的操作系统启动和关闭时间明显减少,由于其并没有深度结合代码翻译和执行机制,实际应用中容易产生意想不到的错误。文献[8]使用全寄存器映射方法,将X86架构下8个通用寄存器全部映射到MIPS处理器s1~s8,系统仿真性能虽得到了一定的提高,但在引擎切换的上下文中引入了全局寄存器变量和内存中由数组结构维护的寄存器数组间的同步操作,增加了引擎切换开销。此外,现有对引擎切换时上下文备份和恢复的优化技术,基本都集中在以减少引擎切换上下文频度为目标的基于热路径的超级快优化[9]和基于跳转指令的块链优化[10],还未见有以降低引擎切换操作复杂度为优化目标的相关工作

本文依托X86系统仿真软件平台体系结构桥(Architecture Bridge, ARCHBRIDGE),在深入分析基于静态寄存器分配的代码翻译机制的基础上,提出了以解决翻译后目标代码膨胀率高为目标的寄存器映射优化,和以降低引擎切换操作复杂度为目标的自定义指令和影子寄存器相结合的协同优化技术。寄存器映射优化技术深度结合静态寄存器分配策略,将对内存中的模拟源机器寄存器的操作转化为对本地机器寄存器操作,简化了代码翻译规则,降低了翻译后目标代码膨胀率。引擎切换操作优化利用自定义指令和影子寄存器,将引擎切换时上下文的备份和恢复操作简化为2条自定义指令,使引擎切换的效率得到了极大的提升。可见,寄存器映射优化和引擎操作优化都能够有效提升系统仿真效率。

1基于静态寄存器分配的代码翻译机制

寄存器的静态分配策略是在X86系统仿真的代码翻译阶段实施的,所以理论分析从代码翻译机制切入,继而分析静态寄存器分配策略及其引入的系统仿真开销。

1.1代码翻译机制

ARCHBRIDGE目前的翻译机制比较简单,对每条指令翻译的基本步骤如下:

1)将指令操作数从虚拟机中加载到宿主机寄存器;

2)生成执行的指令;

3)将执行结果由宿主机寄存器保存到虚拟机中。

为辅助对X86指令的翻译,ARCHBRIDGE定义了若干支持函数类,包括函数类gen_insn_xxx()、gen_prim_xxx()、gen_code_xxx()、xxx_translator()。为协调宿主机寄存器的分配,将这些支持函数分为4个级别(级别3最高,级别0最低),高级别函数可直接调用任何一层低级别函数,但低级别函数不应调用高级别或同级别的函数,这样可确保所使用的宿主机寄存器不会被二次分配,各级别函数只使用特定的寄存器子集,如表1。

定义代码翻译支持函数的好处是方便移植,只需修改支持函数就可以将ARCHBRIDGE移植到其他RISC平台。

1.2静态寄存器分配

寄存器分配策略就是要明确翻译后目标代码可以使用哪些寄存器以及如何使用这些寄存器,确保系统仿真中翻译引擎、执行引擎、支持函数C Helpers三者在协作执行时不发生寄存器冲突。ARCHBRIDGE目前采用静态寄存器分配方案,即约定目标代码只使用特定的宿主机寄存器的子集,并在生成目标指令的同时确定使用哪个宿主寄存器。

假定宿主机采用OR1200处理器,则各个宿主寄存器的使用约定可以分为以下4类:

推荐访问:寄存器 协同 静态 仿真 分配
上一篇:基于C语言的DSP嵌入式系统研究
下一篇:虚拟实习的研究与探索

Copyright @ 2009 - 2024 优泰范文网 All Rights Reserved

优泰范文网 版权所有 备案号:粤ICP备09201876号-1