论文部分内容阅读
二进制翻译技术通过软件手段将一种指令集体系结构(ISA)上的可执行程序翻译到另一种ISA上执行。该项技术可以应用于代码移植、动态优化、错误监测、系统安全等多个领域。
随着计算机芯片工艺的发展和计算机应用的推动,多核技术正在快速发展。因为多线程程序可以很好地利用多核的并行来提高程序的性能,所以多线程的应用也越来越广泛。因此支持多线程程序的移植,保证多线程程序在不同的ISA上的兼容性,成为二进制翻译器的重要任务。
Code Cache是二进制翻译系统中的一个重要的组成部分,用于缓存翻译器产生的本地代码。Code Cache中数据的布局是否合理,将会从很大程度上影响代码的局部性,从而影响性能。多线程程序的移植为二进制翻译器以及Code Cache管理带来了新的挑战。
本文主要针对支持多线程程序的二进制翻译器中的Code Cache管理策略进行了研究。通过对多线程程序特点的分析,提出一种合理的线程间共享Code Cache的管理策略:针对多线程共享的Code Cache,当其容量达到上限时对其进行替换。该策略在不影响线程并发度的前提下,改善了代码局部性。
本文的主要贡献如下:
1、提出一种在多线程环境下跟踪线程踪迹的方法。和不跟踪线程踪迹的替换方案相比,这种方法在发生Code Cache替换的时候,需要和运行时系统进行同步的线程数量较少,从而提高了多线程程序的并发度。
2、设置永不替换的Code Cache单元,解决了在源二进制程序中调用系统调用进行同步操作时发生Code Cache替换而导致死锁的问题。
3、提出细粒度锁的优化方案,提高运行时系统的并发度。
4、提出无锁哈希表的解决方案,采用原子操作保证在二进制翻译器本地码中访问哈希表时避免死锁,并进一步提高了运行时系统的并发度。