二进制翻译中代码Cache分级双粒度管理策略.docVIP

二进制翻译中代码Cache分级双粒度管理策略.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二进制翻译中代码Cache分级双粒度管理策略

二进制翻译中代码Cache的分级双粒度管理策略   摘 要:提出一种二进制翻译中代码Cache管理的LRC(Level-Region-Chunk)策略。其兼具全清空策略、FIFO策略和多级Cache的优点,并且考虑了程序的时间空间局部性、执行特性和替换开销,具有较好的性能,实现了代码Cache的高效管理。   关键词:二进制翻译;代码Cache;LRC策略   中图分类号:TP319文献标志码:A   文章编号:1001-3695(2007)06-0302-04   二进制翻译技术是目前解决软件移植问题的一个研究热点,能将现有的软件移植到新开发的处理器上执行。基于软件的二进制翻译系统主要分为解释器、静态翻译器和动态翻译器三种。动态二进制翻译系统的基本原理是这样的:动态翻译执行源体系结构的二进制代码,收集Profile信息;通过反馈信息对执行频度较高的代码采用简单高效的策略进行深度优化,得到效率更高的目标机本地代码。??   动态二进制翻译中一类比较重要的问题是如何管理翻译出来的目标机本地代码,既要尽可能少地占用内存空间,又要减少由于代码Cache的替换操作造成的性能下降。本文通过对常用的代码Cache管理策略进行分析,提出一种新的代码Cache管理策略LRC(Level-Region-Chunk)。LRC策略结合了全清空、FIFO和多级Cache等方法的优点,具有分级双粒度的特点,Cache不命中率小;并且考虑到程序的时间空间局部性和Cache替换开销,实现了对代码Cache的高效管理。??      1 常见的Cache管理策略??   代码Cache是指软件模拟Cache的行为,在内存中开辟一块空间来存储翻译出来的目标机本地码。在介绍LRC策略之前,先介绍动态二进制翻译系统和动态优化系统中常用的几种代码Cache管理策略。??   (1)不替换策略??   不替换策略就是在代码Cache中从低地址到高地址依次存放每个代码块。由于空间足够大,不会出现本地码的替换,只有本地码第一次翻译时发生Cache不命中。这种策略是用大量牺牲内存的方式来换取时间上的优势,但是会给硬件的内存容量带来压力。尤其是那些嵌入式系统中,由于内存容量有限,对内存使用量的限制非常严格。这种策略并不可取,不作为LRC策略的实验对比对象。??   (2)全清空策略??   全清空策略是在代码Cache中从低地址到高地址依次存放每个代码块。当Cache空间不足或程序阶段行为突变时,清空整个Cache。许多动态二进制翻译系统和动态优化系统都采用这个策略,如Walkabout和Dynamo。其优点是算法简单、容易实现、管理开销较小;但是没有考虑程序的时间和空间局部性,也没有考虑程序的执行特性,会把很多比较热的代码块替换出去,导致很多代码块的重复换入换出。这种抖动现象降低了程序的性能。??   (3)FIFO策略??   FIFO策略是在代码Cache中从低地址到高地址依次存放每个代码块。当Cache空间不足时,按FIFO顺序把最先进入Cache的代码块替换出去。如果空间仍然不足,就继续把物理上相邻的代码块替换出去,直至有足够的空间来存放代码块。DynamoRIO系统就采用这种策略。FIFO策略在一定程度上考虑了程序执行的阶段性特征。被替换出去的代码块是当前Cache中最先生成的代码块,因此有可能已经不再是执行的热点。这种策略的执行效率较高;但是它没有考虑程序的执行特性,也没有考虑减少代码块换出的次数从而减少管理的开销,而且先生成的代码块也未必应该先被替换出Cache。因为代码的热度不取决于进入Cache的顺序。在性能上仍然存在一定的局限性。??   (4)其他策略??   除了上述三种最常用的管理策略外,还存在一些如最近最久未使用(LRU)策略、最大块优先替换、最适合大小块优先替换等策略。LRU策略虽然考虑了程序的执行特性和时间局部性,但实现复杂,算法本身的开销非常大,而且还有碎片产生;后两种策略只考虑空间的利用效率,而很少考虑程序的时间局部性和执行特性。这些策略很少被动态二进制翻译系统和动态优化系统采用。??      2 LRC策略??   2.1 本地码的链接和断链??   在翻译执行目标机本地码的过程中,存在翻译控制器与本地码之间的上下文切换。这个切换要做很多事情。例如保存或恢复机器运行状态、再优化/再翻译源程序接下来的指令序列、存储翻译优化的本地码到Cache中等操作,会带来很大开销。一种解决办法就是记录x86二进制代码的前驱后继关系,把本地码按照逻辑上的执行顺序链接起来,减少切换次数,直到所需的本地码不在代码Cache中,才发生切换来翻译执行后续的x86代码。??   Cache管理策略要对Cache中的某

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档