一种动态二进制翻译中基于代码热度的翻译缓存管理方法技术

技术编号:13505321 阅读:106 留言:0更新日期:2016-08-10 12:14
本发明专利技术提供了一种动态二进制翻译中基于代码热度的翻译缓存管理方法,所述方法包括步骤:将整个翻译缓存划分两级缓存;当有新的基本块需要翻译时,根据所述基本块的地址在所述热代码缓存查找代码块;根据所述基本块的地址在所述子代码缓存查找代码块;计算缓存所述代码块需要的空间大小;清空所述子代码缓存;翻译所述基本块,并将翻译后的代码块存入所述子代码缓存;执行所述代码块;统计所述代码块的执行次数,如果所述执行次数大于所述阈值,则将所述代码块缓存入所述热代码缓存;将所述基本块加入慢哈希表,将结果加入快哈希表。

【技术实现步骤摘要】

本专利技术涉及计算机应用领域的动态二进制翻译缓存管理技术,特别涉及一种动态二进制翻译中基于代码热度的翻译缓存(TransCache)管理方法。
技术介绍
近年来,二进制翻译技术已成为一种用软件方法实现代码移植的重要手段。由于二进制翻译及其相关优化技术的研究在代码移植、虚拟机、网络应用、计算机安全和硬件开发等方面都具有重要意义,已经成为现代计算机研究的热点之一。动态二进制翻译技术是二进制翻译技术今后发展的一个主要方向。它将源目标机器的二进制程序动态的翻译为目标机器的二进制程序。动态二进制翻译的基本工作原理是这样的 :以基本块为单位翻译源体系结构二进制代码,通过翻译生成相应的目标体系结构支持的代码块,并缓存在翻译缓存(TransCache)中,这样当程序再次运行到这个基本块时,就直接从TransCache中得到相应的目标体系结构代码并执行,从而提高程序执行速度。由此可见,使用TransCache可以使动态二进制翻译器的性能得到极大提升。和硬件缓存一样,TransCache需要选择存储对象,安排其存放位置并对其进行替换管理等。由于TransCache是一片软件管理的缓存,管理开销会直接影响动态二进制翻译器的性能,因此对动态二进制翻译器的TransCache的管理方法的研究和改进具有重要意义。目前,动态二进制翻译系统中常用的TransCache管理方法主要有以下几种:1)全清空策略全清空策略就是整个TransCache按地址依次存放代码块,当TransCache的剩余空间不足就将所有的代码块替换出去以清空整个TransCache。全清空策略算法简单,实现方便,同时管理开销也较小,并且不会产生碎片。但这种方法的替换粒度太大,会导致整个TransCache的miss rate(缺失率)过高,同时它没有考虑到程序的时间空间局部性,会把很多热代码块也替换出去,导致热代码块的反复替换,降低TransCache的性能。2)LRU策略LRU (Least Recently Used)策略的基本原来是当TransCache空间不足时将最久最少使用的块替换出去,如果替换后的TransCache空间任然不足则将刚提出去的块相邻的物理块也替换出去,重复此过程直到TransCache具有足够的空间来存放新的代码块。这种算法考虑到了程序的时间局部性,以程序最近的执行特性来预测其将来的执行特性。但它的实现算法比较复杂,付出的管理开销较大,有时它的性能还不如全清空策略,所以使用LRU策略的二进制翻译系统较少。3)FIFO策略FIFO策略是将TransCache看成一个FIFO(First In First Out)缓冲区,当TransCache空间不足时,将最先进入TransCache的代码块替换出去,如果TransCache空间任然不足,则将次先进如的代码块替换出去,直到TransCache有足够的空间分配给新的代码块。FIFO策略在一定程度上考虑程序的时间局部性,但FIFO算法的开销较大,二进制翻译系统一般很少直接使用它,而是和其他算法结合起来使用。出了以上几种TransCache管理方法外,还有一些其他的管理策略,如基于工作集的全清空策略、不替换策略、最大块优先替换策略等。基于工作集的全清空策略实现的基础是程序的执行需要明显的阶段区分,不替换策略要求TransCache的空间足够大,最大块优先替换策略只考虑程序的空间局部性,而没有考虑程序的时间局部性和执行特性。TransCache管理策略对于提高动态二进制翻译系统的翻译速度具有重要作用,它需要综合考虑代码时间空间局部性、管理开销、代码缺失率等问题,而现有的TransCache管理策略依然存在各种不足。因此,需要专利技术一种新的TransCache管理方法,用于在动态二进制翻译系统中对TransCache进行高效的管理。
技术实现思路
本专利技术要解决的技术问题是提供一种动态二进制翻译中基于代码热度的翻译缓存管理方法,以便提高动态二进制翻译系统中TransCache的命中率和提高热代码在TransCache中的留存时间,减少代码块替换次数和重复翻译次数。本专利技术的动态二进制翻译中基于代码热度的翻译缓存管理方法,包括以下步骤:1)将整个翻译缓存划分两级缓存,所述两级缓存包括第一级子代码缓存和第二级热代码缓存,所述子代码缓存用于存放普通代码块,所述热代码缓存用于存放热代码块,其中,所述普通代码块为新翻译的代码块和从热代码缓存中替换出来的代码块,所述热代码块为热度达到阈值的代码块;2)当有新的基本块需要翻译时,根据所述基本块的地址在所述热代码缓存查找,如果找到所述代码块,则执行步骤7;3)根据所述基本块的地址在所述子代码缓存查找,如果找到所述代码块,则执行步骤7;4)计算缓存所述代码块需要的空间大小,如果所述子代码缓存剩余空间大于所述代码块则执行步骤6;5)清空所述子代码缓存,执行步骤6;6)翻译所述基本块,并将翻译后的代码块存入所述子代码缓存;7)执行所述代码块;8)统计所述代码块的执行次数,如果所述执行次数大于所述阈值,则将所述代码块缓存入所述热代码缓存;9)将所述基本块加入慢哈希表,将结果加入快哈希表。所述步骤8中的热代码缓存包括如下步骤:8-1)将所述热代码缓存空间划分为相同大小的N个子块;8-2)根据所述热代码缓存空间的初始位置和子块容量确定所有子块的起始位置和终止位置,所述子块容量为总容量的 N分之一;8-3)设置一个当前位置,表示所述热代码缓存区域中代码存放的位置。当程序开始运行时,当前位置即为第一子块的初始位置。所述步骤8中的热代码缓存也可以包括如下步骤:8-1)计算缓存所述代码块需要的空间大小,判断所述热代码缓存中当前缓存子块是否有足够剩余空间存放新的代码块,如果所述缓存子块剩余空间足够存放所述代码块,则执行步骤8-4;8-2)若相邻子块已经存放了代码块,则将该子块已经存储的代码块缓存入子代码缓存中,否则执行步骤8-3;8-3)将所述代码块存放在相邻子块中,执行步骤9;8-4)将所述的代码块存放在该缓存子块中。本专利技术与现有技术相比具有以下优点:1)本专利技术的管理方法将热度达到一定阈值的代码块放入单独的HotCache中,而HotCache中的代码块需要替换时并不直接替换出去,而是缓存入SubCache中,这种策略尽可能的提高了热代码在TransCache中的留存时间,提高了TransCache的命中率,这一点是全清空策略的缺陷所在;2) 本专利技术的管理方法在每次替换时不需要遍历整个TransCache,较之LRU算法来说节省了遍历时间,同时也不如LRU复杂,这对提高翻译效率至关重要;3)对于严格的FIFO算法,由于没有考虑程序的执行特性,只是单纯的按照First InFirst Out来替换代码块,这很可能把最热的代码给替换出去,本算法可以很好的避免这一问题,在性能上较FIFO算法有了一定的提高。4)本专利技术将整个TransCache划分两级缓存,两级缓存包括level1级SubCache和level2级HotCache,其中SubCache用于存放普通代码块, HotCache用于存放热代码块,两级缓存各自所占比例可调,从而可以根据源代码大小、源体系结构和目标体系结构等因素来定本文档来自技高网
...

【技术保护点】
一种动态二进制翻译中基于代码热度的翻译缓存管理方法,其特征在于,所述的方法包括以下步骤:将整个翻译缓存划分两级缓存,所述两级缓存包括第一级子代码缓存和第二级热代码缓存,所述子代码缓存用于存放普通代码块,所述热代码缓存用于存放热代码块,其中,所述普通代码块为新翻译的代码块和从热代码缓存中替换出来的代码块,所述热代码块为热度达到阈值的代码块;当有新的基本块需要翻译时,根据所述基本块的地址在所述热代码缓存查找,如果找到所述代码块,则执行步骤7;根据所述基本块的地址在所述子代码缓存查找,如果找到所述代码块,则执行步骤7;计算缓存所述代码块需要的空间大小,如果所述子代码缓存剩余空间大于所述代码块则执行步骤6;清空所述子代码缓存,执行步骤6;翻译所述基本块,并将翻译后的代码块存入所述子代码缓存;执行所述代码块;统计所述代码块的执行次数,如果所述执行次数大于所述阈值,则将所述代码块缓存入所述热代码缓存;将所述基本块加入慢哈希表,将结果加入快哈希表。

【技术特征摘要】
1.一种动态二进制翻译中基于代码热度的翻译缓存管理方法,其特征在于,所述的方法包括以下步骤:将整个翻译缓存划分两级缓存,所述两级缓存包括第一级子代码缓存和第二级热代码缓存,所述子代码缓存用于存放普通代码块,所述热代码缓存用于存放热代码块,其中,所述普通代码块为新翻译的代码块和从热代码缓存中替换出来的代码块,所述热代码块为热度达到阈值的代码块;当有新的基本块需要翻译时,根据所述基本块的地址在所述热代码缓存查找,如果找到所述代码块,则执行步骤7;根据所述基本块的地址在所述子代码缓存查找,如果找到所述代码块,则执行步骤7;计算缓存所述代码块需要的空间大小,如果所述子代码缓存剩余空间大于所述代码块则执行步骤6;清空所述子代码缓存,执行步骤6;翻译所述基本块,并将翻译后的代码块存入所述子代码缓存;执行所述代码块;统计所述代码块的执行次数,如果所述执行次数大于所述阈值,则将所述代码块缓存入所述热代码缓存;将所述基本块加入慢哈希表,将结果加入快哈希表。2.根据权利要求1...

【专利技术属性】
技术研发人员:邓霏高峰
申请(专利权)人:中国工程物理研究院计算机应用研究所
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1