二进制翻译器中线程共享目标本地码缓存替换方法及系统技术方案

技术编号:4382578 阅读:166 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及二进制翻译器中线程共享code cache的替换方法及系统。该方法包括:步骤10,将本地码空间划分成N个相同大小的可替换单元和一个永不替换单元,N为自然数;可替换单元用于进行普通本地码的分配以及实施替换策略,永不替换单元用来保存与线程同步相关的本地码;步骤20,从当前可替换单元中分配本地码,直到当前可替换单元的容量达到上限时再从下一个可替换单元开始分配本地码;步骤30,当本地码空间达到容量的上限时,以可替换单元为单位按照先进先出策略进行本地码替换。本发明专利技术提出并实现了多线程code cache的替换方案,这种替换方案可广泛适用于各种体系结构之上的二进制翻译器中,在开销较小的同时保证了线程的并发性。

【技术实现步骤摘要】

本专利技术涉及二进制翻译器,尤其涉及二进制翻译器中线程共享code cache (目标本地码缓存)的替换方法及系统。
技术介绍
二进制翻译是解决软件移植问题中的一种重要技术,它可以将一种指令集 体系结构(ISA)上的可执行程序翻译到另一种指令集体系结构的计算机上执 行,并且具备很高的执行效率。二进制翻译现也经常用来将一种ISA上的可 执行程序翻译到同种ISA的较高版本上执行,以在同一个系列的计算机中使 用高档次的机器高效地运行低档次机器上开发的软件。特别是随着虚拟机技术 的普及,二进制翻译技术的重要性也越来越大,很多虚拟机软件中都不同程度 的运用了二进制翻译技术以保障虚拟机的运行效率。许多多线程应用属于大型应用,由于二进制翻译过程会带来一定程度的代 码膨胀,普通大小的code cache己经无法满足多线程程序的需要,如果不限制 code cache的大小并采取一定的替换策略,将会造成内存空间大量占用,由操 作系统进行虚存管理的过程将对虚拟机的性能产生极大的影响。所以针对多线 程程序code cache的管理策略进行研究成为支持多线程程序以及提高程序性 能的关键。针对多线程程序的code cache管理主要有两种方法线程独立和线程共 享。线程独立的code cache实现较简单,code cache管理带来的竞争相对较小, 而且能带来较好的程序局部性,但是线程独立的code cache却会增大翻译的开 销,因为即使不同的线程执行同样的x86代码,由于每个线程的code cache是 独立的,我们也需要重新翻译并为每个线程生成本地码。同样它也会带来更大 的代码膨胀。线程共享的cache管理则较容易将带来线程间同步和竞争的开销, 这个开销来源于分配本地码空间,以及翻译出来的本地码达到cache容量的上 限时需要清除本地码所带来的线程挂起的开销。而且直观的来看由于不同的线程都同时使用了一块code cache,代码的排列的局部性将会受到影响。但是线 程共享的code cache却可以最大地减少翻译的开销。因为一个线程翻译出来的 本地码也可以被另一个线程访问到。这样代码膨胀率较线程独立的code cache 小。那么选择线程独立还是线程共享的管理策略的关键还是取决于我们所翻 译的目标应用程序的特征。如果各个线程之间共享代码的比例不高,那么采用 线程独立的code cache就可以了,例如各种桌面应用。如果各个线程之间共享 代码的比例较高,那么采用线程共享的code cache较好。例如大型的Server 应用。对于Server类的应用程序来说,线程共享的code cache对性能尤为关键。 因为这样的程序往往基于multi-threaded的结构。线程数目多,线程之间共享 的比例较高。如果采用线程独立的code cache将会造成大量的性能下降。因此 线程共享的code cache替换算法将使二进制翻译器适应大多数的大型多线程 应用。
技术实现思路
为了解决上述的技术问题,提供了二进制翻译器中线程共享code cache的 替换方法及系统,其目的在于,针对多线程共享的code cache,当其容量达到 上限的时候对其进行替换,并通过高效地管理本地码的手段来提高翻译多线程 程序的性能,在保持线程并发的基础上保证了较低的code cache管理开销,同 时达到较低的失效率以及较高的代码局部性。本专利技术提供了二进制翻译器中线程共享code cache的替换方法,包括步骤10,将本地码空间划分成N个相同大小的可替换单元和一个永不替 换单元,N为自然数;可替换单元用于进行普通本地码的分配以及实施替换策 略,永不替换单元用来保存与线程同步相关的本地码;步骤20,从当前可替换单元中分配本地码,直到当前可替换单元的容量 达到上限时再从下一个可替换单元开始分配本地码;步骤30,当本地码空间达到容量的上限时,以可替换单元为单位按照先 进先出策略进行本地码替换。步骤10中,本地码空间是二进制翻译器事先分配好的一段内存空间。可替换单元中含有多个基本块的本地码。步骤20中,在可替换单元内和可替换单元间都对每个基本块进行本地码 链接。步骤30中,在进行本地码替换时,将N个可替换单元组成循环链表,按 照先进先出的顺序,每次替换一个可替换单元的本地码。与线程同步相关的本地码为含有系统调用或者同步指令的基本块生成的 本地码。步骤30中,在替换本地码空间时,需要保证没有线程正在将要被替换的 可替换单元中执行。在替换本地码空间时,保证没有线程正在将要被替换的可替换单元中执行的步骤包括步骤301,阻止线程进入将要被替换的可替换单元;步骤302,根据每个线程的当前执行指令地址,等待线程从将要被替换的 可替换单元中退出;步骤303,清空将要被替换的可替换单元。 步骤301包括步骤3011,将本地码在本可替换单元中的基本块的本地码地址在哈希表 中失效,使得二进制翻译器不能从哈希表中访问到本可替换单元中的所有基本 块;步骤3012,如果跳转指令的目标指令地址在将要替换的可替换单元中, 则要断开跳转指令所在基本块跟将要替换的可替换单元的本地码链接。 步骤302包括步骤3021,断开将要替换的可替换单元中本地码链接的回边链接,使将 要替换的可替换单元中的循环尽快退出;步骤3022,等待至将要替换的可替换单元中的线程全部退出。 本专利技术提供了二进制翻译器中线程共享code cache的替换系统,包括 替换单元划分模块,用于将本地码空间划分成N个相同大小的可替换单 元和一个永不替换单元,N为自然数;可替换单元用于进行普通本地码的分配 以及实施替换策略,永不替换单元用来保存与线程同步相关的本地码;本地码分配模块,用于从当前可替换单元中分配本地码,直到当前可替换单元的容量达到上限时再从下一个可替换单元开始分配本地码;本地码替换模块,当本地码空间达到容量的上限时,以可替换单元为单位按照先进先出策略进行本地码替换。本地码空间是二进制翻译器事先分配好的一段内存空间。 可替换单元中含有多个基本块的本地码。本地码分配模块,还用于在可替换单元内和可替换单元间都对每个基本块 进行本地码链接。本地码替换模块,还用于在进行本地码替换时,将N个可替换单元组成 循环链表,按照先进先出的顺序,每次替换一个可替换单元的本地码。与线程同步相关的本地码为含有系统调用或者同步指令的基本块生成的 本地码。本地码替换模块,还用于保证没有线程正在将要被替换的可替换单元中执行。本地码替换模块,还用于阻止线程进入将要被替换的可替换单元,根据每 个线程的当前执行指令地址等待线程从将要被替换的可替换单元中退出,清空 将要被替换的可替换单元,以保证没有线程正在将要被替换的可替换单元中执 行。本地码替换模块,还用于将本地码在本可替换单元中的基本块的本地码地 址在哈希表中失效,使得二进制翻译器不能从哈希表中访问到本可替换单元中 的所有基本块;如果跳转指令的目标指令地址在将要替换的可替换单元中,则 要断开跳转指令所在基本块跟将要替换的可替换单元的本地码链接。本地码替换模块,还用于断开将要替换的可替换单元中本地码链接的回边 链接,使将要替换的可替换单元中的循环尽快退出;等待至将要替换的可替换 单元中的线程全部退出。本专利技术本文档来自技高网
...

【技术保护点】
二进制翻译器中线程共享code cache的替换方法,其特征在于,包括: 步骤10,将本地码空间划分成N个相同大小的可替换单元和一个永不替换单元,N为自然数;可替换单元用于进行普通本地码的分配以及实施替换策略,永不替换单元用来保存与线程同步相关的本地码; 步骤20,从当前可替换单元中分配本地码,直到当前可替换单元的容量达到上限时再从下一个可替换单元开始分配本地码; 步骤30,当本地码空间达到容量的上限时,以可替换单元为单位按照先进先出策略进行本地码替换。

【技术特征摘要】

【专利技术属性】
技术研发人员:张盈武成岗
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1
相关领域技术
  • 暂无相关专利