CN103150196B - 动态二进制翻译中代码Cache管理方法 - Google Patents
动态二进制翻译中代码Cache管理方法 Download PDFInfo
- Publication number
- CN103150196B CN103150196B CN201310048645.8A CN201310048645A CN103150196B CN 103150196 B CN103150196 B CN 103150196B CN 201310048645 A CN201310048645 A CN 201310048645A CN 103150196 B CN103150196 B CN 103150196B
- Authority
- CN
- China
- Prior art keywords
- fundamental block
- jump target
- cache
- block
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及计算机应用领域中的动态二进制翻译技术,公开了一种动态二进制翻译中代码Cache管理方法,所述代码Cache包括非跳转目标Cache和跳转目标Cache,所述代码Cache采用FIFO策略,包括以下具体步骤:确定带翻译基本块的类型,所述基本块为非跳转目标基本块时,执行非跳转目标基本块处理流程,所述基本块为跳转目标基本块时,执行跳转目标基本块处理流程。本发明的优点在于,可以高效地缓存已经翻译过的代码,减少重复翻译。
Description
技术领域
本发明涉及计算机应用领域中的动态二进制翻译技术,特别涉及一种动态二进制翻译中代码Cache管理方法。
背景技术
动态二进制翻译技术是解决遗留代码和提高软件平台适应性的一种有效手段。它在不需要可执行程序源代码的情况下,动态地将源体系结构上的二进制程序经过转换,运行于其他目标体系结构上。动态二进制翻译基本上是这样工作的:以基本块为单位翻译源体系结构二进制代码,通过翻译生成相应的目标体系结构支持的代码块,并缓存在代码Cache中,这样当程序再次运行到这个基本块时,就直接从代码Cache中得到相应的目标体系结构代码并执行,从而提高程序执行速度。利用代码Cache加速翻译效率的同时,需要对翻译出来的代码块进行有效的管理,需要既节省本地内存空间,又不至于引起代码Cache由于空间不足导致频繁的替换操作以致性能下降。常见的代码Cache管理策略包括:
(1)全清空策略
在全清空策略下,当代码Cache空间不足时,代码Cache中所有的代码块都被清除,该策略最大的优点就是算法简单,实现起来容易,管理起来也较为方便,所以被很多二进制翻译系统所采用,但是该策略没有考虑到程序执行特性,对时间空间的局部性考虑不够,可能会导致很多较热的代码块被替换出去,许多块被重新导入导出,增加了不必要的开销。
(2)不替换原则
一次性开辟足够大的空间使得所有代码块都由始至终保存在代码Cache中,每个代码块翻译只有在第一次会发生未命中,代码块在被翻译后,被翻译的代码块会被保存至代码Cache供下次调用,该策略通过牺牲大量空间的方式来换取高速的优势,对于资源受限的系统来说,该策略不可取。
(3)LRU(Least-Recently-Used)策略
LRU策略在发生代码Cache满的情况下,选择将使用次数最少的代码块替换出去。当被替换的代码块大小小于新翻译的代码块时,需要将被替换代码块后序的代码块进行替换,以获得足够大的连续空间。该策略的优点在于考虑了程序的执行特性和程序的时间局限性。缺点在于:1)需要额外的有序链表来管理代码块,实现起来复杂,且增加了运行时开销;2)为产生足够大的空间来存储新产生的代码块,使得不符合LRU原则的代码块被替换;3)会产生Cache内存碎片。
(4)LFU(Least-Frequently-Used)策略
LFU策略与LRU策略实现类似,也存在LRU的优点和缺点,只是LFU替换原则在于每次选择使用最不频繁的代码块进行替换。
(5)FIFO(First-In-First-Out)策略
利用环形缓存实现Cache管理,将指针指向最早进入Cache的代码块,当代码Cache空间不足时,将指针指向的代码块换出,并将指针后移。该策略实施简单,同时也考虑了程序的局部性特性,因为最早进入的代码块可能后面不会再被执行到,且不会产生碎片问题,因此使用广泛。但由于FIFO策略对程序执行特性理解不够透彻,还是存在将热代码被换出的情况。
除了上述5种代码Cache管理策略外还存在一些,如最大块优先替换、最适合大小块优先替换等策略。由于它们只考虑空间的利用效率而没有或很少考虑程序的时间空间局部性和程序的执行特性,因而它们一般不被动态二进制翻译和优化系统采用。
代码Cache管理策略在动态二进制翻译中对提高翻译效率具有重要作用,它需要综合考虑管理开销、代码局部性、代码碎片等问题,然而现有的代码Cache管理策略依然存在着各种不足,因此,亟需提出一种更有效的代码Cache管理策略。
发明内容
本发明针对现有的代码Cache管理策略中存在的代码块重复换出频繁,重复翻译率高、翻译效率较低等缺点,提供了一种可以避免重复执行代码块的换出,减少重复翻译的新型动态二进制翻译中代码Cache管理方法。
为实现上述目的,本发明可采取下述技术方案:
动态二进制翻译中代码Cache管理方法,所述代码Cache包括非跳转目标Cache和跳转目标Cache,所述代码Cache采用FIFO策略,包括以下具体步骤:
1)确定带翻译基本块的类型,所述类型包括跳转目标基本块、非跳转目标基本块,所述跳转目标基本块存储在跳转目标Cache中,所述非跳转目标基本块存储在非跳转目标Cache中,其中,所述跳转目标基本块为由跳转指令跳转执行的基本块,所述非跳转目标基本块为由非跳转指令顺序执行的基本块;
2)所述基本块为非跳转目标基本块时,执行非跳转目标基本块处理流程:
2-1)根据所述基本块的地址在所述非跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤2-4;
2-2)根据所述基本块的地址在所述跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤2-4;
2-3)翻译所述基本块,并将翻译后所得代码块缓存至所述非跳转目标Cache;
2-4)执行所述基本块;
3)所述基本块为跳转目标基本块时,执行跳转目标基本块处理流程:
3-1)根据所述基本块的地址在所述跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤3-5;
3-2)根据所述基本块的地址在所述非跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤3-4;
3-3)翻译所述基本块,并将翻译后所得代码块缓存至所述跳转目标Cache,跳转执行步骤3-5;
3-4)将所述基本块从所述非跳转目标Cache中转移至所述跳转目标Cache;
3-5)执行所述基本块;
4)循环执行所述步骤1至3直至所有基本块执行完毕。
作为优选,所述步骤1还包括:
1-1)初始化第一个基本块为非跳转目标基本块;
1-2)翻译所述基本块直至所述基本块的结束指令,根据所述结束指令的类型标志标记下一个基本块的类型;
1-3)执行所述步骤1-2翻译后所得代码块。
作为优选,用全局变量标识flag对所述基本块的类型进行标识。
作为优选,使用哈希表查找所述代码Cache中的基本块,用PC+flag计算所述非跳转目标基本块的哈希值,用PC+~flag(~表示取反操作)计算所述跳转目标基本块的值,其中,PC表示所述基本块的地址。
本发明由于采用了以上技术方案,具有显著的技术效果:
本发明包括有区分的、用FIFO策略进行管理的代码Cache,通过设置全局变量表示flag标识基本块类型,同时采用统一的哈希表对所有的代码Cache进行管理,在考虑了程序的局部性的同时,将管理代码Cache的系统额外开销降到最低,以较低的管理开销避免了将非频繁执行的代码块进入代码Cache导致的系统频繁地对基本块进行的重复翻译,从而提高了动态二进制翻译的性能。
附图说明
图1为实施例1所述QEMU动态二进制翻译流程示意图。
图2为本发明所述动态二进制翻译中代码Cache管理方法的流程示意图。
图3为本发明所述非跳转目标基本块处理流程示意图。
图4为本发明所述跳转目标基本块处理流程示意图。
具体实施方式
下面结合实施例对本发明作进一步的详细描述。
实施例1
本实施例采用的动态二进制翻译系统为开源的QEMU系统,但本方法也可以推广到其他二进制翻译系统中。QEMU系统将源目标体系结构(如ARM,X86,MIPS)的可执行文件翻译到中间代码,然后再翻译到目标体系结构ISA(InstructionSetArchitecture)(如X86,PowerPC,ARM,Sparc,Alpha,MIPS)上执行。翻译单位为基本块,基本块是一段以跳转指令或改变处理器状态指令结束的指令序列。QEMU采用TCG作为中间代码,每条源体系结构指令会在前端被翻译为一条或者多条TCG指令,后端会将这些TCG指令翻译为目标体系结构代码。TCG具有简单、清晰的语法结构。
QEMU的动态二进制翻译流程如图1所示。QEMU首先加载源体系结构二进制文件,并找到程序的入口地址,开始翻译。每次翻译前,QEMU会首先根据当前程序计数器中保存的地址查找代码Cache,若找到,则表示该基本块已经翻译过,则取出相应代码块执行,没找到,则执行翻译过程。翻译前端针对当前指令,首先译码判断指令功能,然后将其翻译为对应的TCG指令,缓存在TCGCache中,然后继续翻译下一条指令,直至遇到基本块结束指令,则结束当前基本块翻译。后端将当前基本块对应的TCG指令翻译为目标体系结构代码,并缓存在代码Cache中,同时执行目标代码。QEMU代码Cache管理采用全清空策略,Cache查找采用哈希表的方式。
本发明的主要改进之处如下所述:
1、将代码Cache划分为非跳转目标Cache和跳转目标Cache,以分别缓存非跳转目标基本块和跳转目标基本块。两个Cache各自所占的比例可调,视具体应用而定。
2、代码Cache的管理采用FIFO策略,分别用指针指向最先进入代码Cache的代码块。当Cache满时,直接将指针移至下一个代码块,表示将最先进入Cache的代码块换出。
3、设置全局变量标识flag当前基本块类型,并在上一个基本块翻译结束时对该变量赋值。赋值在代码块执行过程中完成。Flag有两种取指,分别为JUMP_TARGET和NON_JUMP_TARGET。JUMP_TARGET对应跳转目标基本块,NON_JUMP_TARGET对应非跳转目标基本块。Flag初始化为NON_JUMP_TARGET,表示第一个基本块为非跳转目标类型。下面的表1列举了指令类型与flag值的对应关系,翻译最后一条指令时,根据指令类型,将赋值指令也翻译为目标体系代码作为代码块的一部分。
表1基本块结束指令类型与flag取值的对应关系
4、非跳转目标Cache和跳转目标Cache采用统一的哈希表,哈希值由基本块地址PC和基本块类型flag经过哈希函数计算获得。
具体地,本发明的动态二进制翻译中代码Cache管理方法,如图2所示,所述代码Cache包括非跳转目标Cache和跳转目标Cache,代码Cache,包括非跳转目标Cache和跳转目标Cache均采用FIFO策略,包括以下具体步骤:
1)确定带翻译基本块的类型,用全局变量标识flag对所述基本块的类型进行标识。所述类型包括跳转目标基本块、非跳转目标基本块,所述跳转目标基本块存储在跳转目标Cache中,所述非跳转目标基本块存储在非跳转目标Cache中,其中,所述跳转目标基本块为由跳转指令跳转执行的基本块,即跳转目标基本块是跳转指令的跳转目标,所述非跳转目标基本块为由非跳转指令顺序执行的基本块,非跳转目标基本块为非跳转指令后所执行的基本块;特别地,本发明使用哈希表对代码Cache中的基本块进行管理,因此,使用哈希表查找所述代码Cache中的基本块,其中,PC表示所述基本块的地址。
1-1)初始化第一个基本块为非跳转目标基本块;
1-2)翻译所述基本块直至所述基本块的结束指令,根据所述结束指令的类型标志标记下一个基本块的类型,结束指令是跳转指令,则下一个基本块是由结束指令跳转执行的,该基本块为跳转目标基本块;反之,如果结束指令是非跳转指令,因此下一个基本块就是非跳转目标基本块;
1-3)执行所述步骤1-2翻译后所得代码块;
1-4)循环执行所述步骤1-2至1-3直至所有基本块翻译完毕。
2)所述基本块为非跳转目标基本块时,执行非跳转目标基本块处理流程,具体流程如图3所示:
2-1)根据所述基本块的地址在所述非跳转目标Cache中查找所述基本块,用PC+flag计算所述非跳转目标基本块的哈希值,如果找到所述基本块则跳转执行步骤2-4;
2-2)根据所述基本块的地址在所述跳转目标Cache中查找所述基本块,用PC+~flag计算所述跳转目标基本块的值,如果找到所述基本块则跳转执行步骤2-4;
2-3)翻译所述基本块,并将翻译后所得代码块缓存至所述非跳转目标Cache;
2-4)执行所述基本块。
3)所述基本块为跳转目标基本块时,执行跳转目标基本块处理流程,具体流程如图4所示:
3-1)根据所述基本块的地址在所述跳转目标Cache中查找所述基本块,用PC+~flag计算所述跳转目标基本块的值,如果找到所述基本块则跳转执行步骤3-5;
3-2)根据所述基本块的地址在所述非跳转目标Cache中查找所述基本块,用PC+flag计算所述非跳转目标基本块的哈希值,如果找到所述基本块则跳转执行步骤3-4;
3-3)翻译所述基本块,并将翻译后所得代码块缓存至所述跳转目标Cache,跳转执行步骤3-5;
3-4)将所述基本块从所述非跳转目标Cache中转移至所述跳转目标Cache;
3-5)执行所述基本块。
在上面的技术方案中,由于非跳转目标Cache和跳转目标Cache采用统一的哈希表,因此非跳转目标基本块处理流程和跳转目标基本块处理流程具有相似的流程,即第一次采用PC+flag计算哈希值以查找哈希表,没有查找到继续采用PC+~flag查找哈希表。此过程具体到非跳转目标基本块处理流程则第一次查找非跳转目标Cache,第二次查找跳转目标Cache。而对于跳转目标基本块处理流程则是第一次查找跳转目标Cache,第二次查找非跳转目标Cache。必须采用两次查找的原因在于有些基本块可能第一次是顺序执行,第二次才成为跳转目标,反之亦然。非跳转目标基本块和跳转目标基本块处理流程上唯一区别如图2中2标识,由于跳转目标Cache相对于非跳转目标Cache有更高的优先级,即其中的基本块更不易被换出,因此当基本块第二次执行才被标识为跳转目标时,需要将其代码块拷贝到跳转目标Cache,使其拥有高优先级。
总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等变化与修饰,皆应属本发明专利的涵盖范围。
Claims (4)
1.一种动态二进制翻译中代码Cache管理方法,其特征在于,所述代码Cache包括非跳转目标Cache和跳转目标Cache,所述代码Cache采用FIFO策略,包括以下具体步骤:
1)确定待翻译基本块的类型,所述类型包括跳转目标基本块、非跳转目标基本块,所述跳转目标基本块存储在跳转目标Cache中,所述非跳转目标基本块存储在非跳转目标Cache中,其中,所述跳转目标基本块为由跳转指令跳转执行的基本块,所述非跳转目标基本块为由非跳转指令顺序执行的基本块;
2)所述基本块为非跳转目标基本块时,执行非跳转目标基本块处理流程:
2-1)根据所述基本块的地址在所述非跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤2-4);
2-2)根据所述基本块的地址在所述跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤2-4);
2-3)翻译所述基本块,并将翻译后所得代码块缓存至所述非跳转目标Cache;
2-4)执行所述基本块;
3)所述基本块为跳转目标基本块时,执行跳转目标基本块处理流程:
3-1)根据所述基本块的地址在所述跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤3-5);
3-2)根据所述基本块的地址在所述非跳转目标Cache中查找所述基本块,如果找到所述基本块则跳转执行步骤3-4);
3-3)翻译所述基本块,并将翻译后所得代码块缓存至所述跳转目标Cache,跳转执行步骤3-5);
3-4)将所述基本块从所述非跳转目标Cache中转移至所述跳转目标Cache;
3-5)执行所述基本块;
4)循环执行所述步骤1)至3)直至所有基本块执行完毕。
2.根据权利要求1所述的动态二进制翻译中代码Cache管理方法,其特征在于,所述步骤1)还包括:
1-1)初始化第一个基本块为非跳转目标基本块;
1-2)翻译所述基本块直至所述基本块的结束指令,根据所述结束指令的类型标志标记下一个基本块的类型;
1-3)执行所述步骤1-2)翻译后所得代码块。
3.根据权利要求1所述的动态二进制翻译中代码Cache管理方法,其特征在于,用全局变量标识flag对所述基本块的类型进行标识。
4.根据权利要求2所述的动态二进制翻译中代码Cache管理方法,其特征在于,用全局变量标识flag对所述基本块的类型进行标识,使用哈希表查找所述代码Cache中的基本块,用PC+flag计算所述非跳转目标基本块的哈希值,用PC+~flag计算所述跳转目标基本块的值,其中,PC表示所述基本块的地址,~flag表示对flag取反操作的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310048645.8A CN103150196B (zh) | 2013-02-07 | 2013-02-07 | 动态二进制翻译中代码Cache管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310048645.8A CN103150196B (zh) | 2013-02-07 | 2013-02-07 | 动态二进制翻译中代码Cache管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103150196A CN103150196A (zh) | 2013-06-12 |
CN103150196B true CN103150196B (zh) | 2015-12-23 |
Family
ID=48548296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310048645.8A Active CN103150196B (zh) | 2013-02-07 | 2013-02-07 | 动态二进制翻译中代码Cache管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103150196B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105843664A (zh) * | 2016-04-20 | 2016-08-10 | 中国工程物理研究院计算机应用研究所 | 一种动态二进制翻译中基于代码热度的翻译缓存管理方法 |
CN106020922B (zh) * | 2016-05-30 | 2019-01-08 | 湖南科技大学 | 用跳转目标基本块的执行包填充空闲节拍的指令调度方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662631A (zh) * | 2012-03-15 | 2012-09-12 | 龙芯中科技术有限公司 | 间接分支指令处理方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9015027B2 (en) * | 2011-04-21 | 2015-04-21 | International Business Machines Corporation | Fast emulation of virtually addressed control flow |
-
2013
- 2013-02-07 CN CN201310048645.8A patent/CN103150196B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662631A (zh) * | 2012-03-15 | 2012-09-12 | 龙芯中科技术有限公司 | 间接分支指令处理方法和装置 |
Non-Patent Citations (1)
Title |
---|
《动态二进制翻译中的跳转优化技术》;梁阿磊 等;《四川大学学报(自然科学版)》;20071231;第44卷(第6期);第1239-1244页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103150196A (zh) | 2013-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10817441B2 (en) | Shared accelerator memory systems and methods | |
JP5945291B2 (ja) | デフレート圧縮のために高速で高圧縮のlz77トークン化及びハフマンエンコーディングを行う並列装置 | |
EP2668565B1 (en) | Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor | |
CN103309644B (zh) | 用于微处理器的转译地址高速缓存 | |
CN102662860B (zh) | 用于进程切换的旁路转换缓冲器(tlb)及在其中地址匹配的方法 | |
CN101387969B (zh) | 软硬件协同设计的动态二进制翻译方法 | |
KR20150112778A (ko) | 하나의 아키텍처의 코드 모듈이 다른 아키텍처의 라이브러리 모듈을 사용할 수 있게 하는 아키텍처 간 호환성 모듈 | |
US8185692B2 (en) | Unified cache structure that facilitates accessing translation table entries | |
US9513886B2 (en) | Heap data management for limited local memory(LLM) multi-core processors | |
CN108257078B (zh) | 存储器知晓重排序源 | |
JP2015530683A (ja) | 異種計算システムにおけるコールド変換索引バッファミスを低減させること | |
CN1863169A (zh) | 基于网络处理器的路由查找结果缓存方法 | |
KR101787851B1 (ko) | 다중 페이지 크기 변환 색인 버퍼(tlb)용 장치 및 방법 | |
CN101149704A (zh) | 微处理器中分段高速缓存的设计方法及分段高速缓存 | |
WO2016107182A1 (zh) | 一种多路组相联的高速缓冲存储器及其处理方法 | |
CN104424128B (zh) | 变长指令字处理器系统和方法 | |
CN105814548A (zh) | 具有使用不同编索引方案的主高速缓存器和溢出高速缓存器的高速缓存器系统 | |
CN110858181A (zh) | 用于执行地址转换的装置和方法 | |
US11301250B2 (en) | Data prefetching auxiliary circuit, data prefetching method, and microprocessor | |
CN101236564A (zh) | 一种海量数据高性能读取显示方法 | |
CN116860665A (zh) | 由处理器执行的地址翻译方法及相关产品 | |
CN105843664A (zh) | 一种动态二进制翻译中基于代码热度的翻译缓存管理方法 | |
GB2513987A (en) | Parallel apparatus for high-speed, highly compressed LZ77 tokenization and huffman encoding for deflate compression | |
CN103150196B (zh) | 动态二进制翻译中代码Cache管理方法 | |
JP2007233615A (ja) | アドレス変換装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |