论文部分内容阅读
动态二进制翻译器中的Code Cache用于缓存翻译后的代码块,当代码块再次被执行时就可以直接使用缓存的代码块,而无须再次翻译。Code Cache的使用可以大大提高翻译器的性能。本文针对Code Cache的管理策略作了深入研究和分析,旨在帮助动态二进制翻译器开发者选用合适的Code Cache管理策略,为Code Cache管理策略的设计者指明方向。本文主要的贡献包括:1.详细阐述了动态二进制翻译器中Code Cache管理需要考虑的问题。分析比较了动态二进制翻译中的Code Cache与传统存储系统中的Cache的异同点,指出了Code Cache管理面临的挑战,并给出了衡量Code Cache管理策略优劣的衡量指标。2.量化分析了替换粒度对于Code Cache性能的影响,给出了如何选择替换粒度的方法。3.详细描述了基于工作集变迁的全清空管理策略,分析了该策略的适用情况,给出了该策略的实现方法。4.论述了两级Code Cache模型,详细分析了两级Code Cache管理策略中的关键点,并通过实验验证了两级Code Cache的有效性。通过理论分析和实验验证,本文得出以下几个结论:1. Code Cache管理的基本原则是减少Visit counts(Code Cache访问次数)和Eviction counts(替换次数),降低Miss rate(缺失率),减小Eviction penalty(缺失惩罚)。2.对于目前Code Cache常用的粗粒度先进先出的管理策略来说,当Code Cache空间压力较大时,选用2Units(替换粒度为2)替换粒度可以获得最优的性能。3.作为全清空策略(替换粒度为整个Code Cache的先进先出管理策略)的一种改进方案,基于工作集变迁的全清空策略有一定的局限性。它较适用于时空局部性良好的程序,对于其它程序可能会出现颠簸(thrashing)而降低性能。4.两级Code Cache针对普通翻译后代码块和反复执行的代码块采用不同的管理策略。实验表明,两级Code Cache管理确实能提高代码块的使用率,获得更好的性能。