本发明专利技术提出了一种动态二进制翻译器中热路径的多核多线程构建方法。本发明专利技术首先将基本块翻译和目标代码的执行部分作为主线程,将构建热路径和翻译超级块部分作为子线程,变通用的动态二进制翻译器中独立的代码缓存结构为双代码缓存的设计方式,利用哈希表函数统一管理这两个代码缓存,使主线程和子线程在数据查询和更新过程中可以并行进行,然后结合硬亲和力指定主线程和子线程工作在多核处理器的不同核上,并用连续的一段内存空间和两个计数器来模拟一段队列,在机器语言级和高级语言级进行两线程间的通信。本发明专利技术具有高并行性和低同步开销的优良特质,为今后动态二进制翻译器的优化工作提供了新的思路和新的框架。
【技术实现步骤摘要】
本专利技术涉及一种,用于提高动态二进制翻译器的性能以及为未来的优化工作提供一种新的框架和新的思路。本专利技术属于二进制翻译
技术介绍
动态二进制翻译技术是虚拟机技术中非常重要的一种实现方法,其特点在于在没有任何高级语言源代码信息的条件下,可以通过直接加载源机器端的二进制可执行程序,并利用自身对不同机器指令集架构(ISA)的翻译功能,得到目标机器端的可执行二进制程序,从而达到跨平台执行程序的目的。但是,这种技术目前仍处于探索和研究的阶段,各种现有的翻译器存在的普遍缺点是性能较差,特别体现在各种跨体系结构的动态二进制翻译器上,例如QEMU (afast machine emulator)翻译器的平均执行时间是本地执行时间的4-5倍左右,由上海交通大学动态二进制翻译小组自主开发的动态二进制翻译器CrossBit (引自文献Design and Implementation of CrossBit: Dynamic Binary Translation Infrastructure)的平均执行时间也在4倍左右。这个缺点严重阻碍了动态二进制翻译技术的普及和应用,因此,优化动态二进制翻译系统的性能是一项极具实践价值和研究意义的工作。构建热路径(profiling and building hot trace)是目前动态二进制翻译器中最主要的优化方法之一。热路径是指执行次数较多的路径,通常是通过剖分(profiling)技术识别到的大于某一个阈值的路径。热路径的执行效率对总的目标代码的执行效率有很大的影响。构建热路径的方法就是针对检测到的各条热路径上的所有基本块,进行重新组织,把热点的最后一条跳转指令和它指向的最有可能跳转到的目的基本块拼凑在一起,从而有效地减少了大量跳转指令的开销,达到提高性能的目的。剖分是指通过对运行中的程序进行监测,对程序3执行行为特征的数据信息进行收集的过程。常用的剖分方法有以下两种-1、 采用instrumentation (插桩)的方式,这种方式通过在代码中插入探针指令或直接利用支持剖分技术的硬件来采集和程序执行行为、特性有关的数据信息。这种方法由于借助软件实现,成本较低。2、 采用sampling (采样)的方式,这种方式以一定的时间间隔对程序运行的相关数据进行数据收集,而不需要对程序进行修改,但是要借助硬件实现,成本较高。二进制翻译系统中构建热路径的正常流程是首先,在每一个执行基本块中插入profiling模块,该模块的功能就在于记录每个基本块的执行次数。然后,一旦这段机器码检测到一个热点(当某个基本块执行次数大于特定的阈值时,该基本块就被称为一个热点),程序就需要保存现场,并执行上下文切换操作,返回到高级语言中去调用相应的构建热路径的模块,然后将调整后的热路径翻译为新的可执行代码,这段可执行代码组成的块被成为超级块(Super block)。最后,当该模块返回超级块后,系统将重新执行这个超级块。但是,构建热路径和翻译超级块的工作本身和二进制翻译的正常执行流程之间并没有必然的联系,而且使用这种线性的构建热路径方式是以多次保存程序现场和引入额外的上下文切换操作来实现的。这部分开销对于热路径较多的程序还是相当可观的。因此,可以尝试一种新的方法来更高效地完成热路径的构建和超级块的翻译,从而更进一步地提高整个动态二进制翻译系统的性能。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种,防止因为构建热路径而引入的保存程序现场行为,减少额外的上下文切换开销,提高整个动态二进制翻译器系统的性能。为实现上述目的,本专利技术首先将整个动态二进制翻译器的基本块翻译和目标代码的执行部分划分为主执行线程,然后将热路径的构建和翻译超级块的部分划分为子线程,并改变了通用的动态二进制翻译器中独立的代码缓存(Cache)结构为双代码缓存的设计方式,利用哈希函数统一管理这两个代码缓存,使主线程和子线程在数据查询和更新过程中可以并行进行,然后通过结合硬亲和力(hardaffinity)使动态二进制翻译器的主线程和子线程分别在两个不同的处理器(CPU)核上运行,最后,用连续的一段内存空间和两个计数器来模拟一段队列,在机器语言级和高级语言级进行两线程间的通信。本专利技术的具体实现步骤如下1、 本专利技术将原有动态二进制翻译器的"翻译,优化,执行"的串行执行工作机制改变为"翻译,执行"的主程序流程与"构建热路径和翻译超级块优化"的子程序流程并行的工作机制。具体为利用多线程编程的技术,将基本块翻译和目标代码的执行部分作为主线程,将构建热路径和翻译超级块部分作为子线程,主线程和子线程并行工作,构成多线程的动态二进制翻译器系统优化架构。2、 原有的动态二进制翻译器中采用了唯一的目标代码缓存(Target CodeCache)来存储翻译好的目标代码基本块和热路径组成的超级块。这种设计方式在并行工作机制中会造成主程序和子程序大量的内存访问冲突,严重影响系统的性能,本专利技术将该设计方式改变为双目标代码缓存架构, 一个缓存用于存放主线程翻译得到的目标代码基本块(Target Code Basic Block),另一个缓存用于存放由子线程构建热路径后得到的目标代码超级块(Target Code Super Block),然后通过全局的哈希表函数来控制主线程和子线程对这两个缓存的读和更新操作。3、 使用硬亲和力将主线程分配在多核处理器的0号核上执行,将子线程分配在1号核上执行。4、 主线程利用生产者计数器作为索引值,在机器语言级别对一段连续的内存空间不断地压入热点的入口地址,子线程利用消费者计数器作为索引值,在高级语言级别不停地从这段连续的内存空间去读取热点的入口地址,完成两线程间的通信。本专利技术的优点在于利用多核多线程技术,在为动态二进制翻译器提供高质量的优化后目标代码的同时,能够尽量屏蔽掉构建热路径算法本身开销对系统总性能的影响。本专利技术的特点在于采用了双目标缓存的设计方式,使基本块翻译和目标代码执行的主线程与热路径的构造和超级块翻译的子线程之间互不干扰,并专利技术了一种更适合于本专利技术例中线程间通信场景的机制,这些技术为多线程方式构建热路径的方法提供了高并行性和低同步开销的优良特质,从而有效地加强了程序执行的稳定性和效率。同时由于本专利技术提出的方法对于其他的各种二进制优化算法同样适用,因此也为今后动态二进制翻译器的优化工作提供了新的思路和新的框架。附图说明图1为的系统框架图。具体实施例方式为更好地理解本专利技术的技术方案,以下通过具体的实施例作进一步描述。以下实施例不构成对本专利技术的限定。1.设计新的系统架构本专利技术是基于上海交通大学自主开发的动态二进制翻译器CrossBit之上研制的,正常的CrossBit的执行流程为(1)加载源可执行映像;(2)查找哈希表中是否存在翻译后的目标机器码对象;(3)若查找命中,执行对应的目标机器代码;若查找缺失,则执行"由源机器码组成的基本块->由中间指令组成的基本块->由目标机器代码组成的基本块"的基本块两次翻译的过程,并将结果存入目标代码缓存中并更新哈希表,然后执行翻译好后的目标机器代码;(4)在执行目标代码的过程中,不断的通过剖分技术获取程序执行信息, 一旦某个块的执行次数大于阈值3000,则执本文档来自技高网...
【技术保护点】
一种动态二进制翻译器中热路径的多核多线程构建方法,其特征在于包括如下步骤: 1)将基本块翻译和目标代码的执行部分作为主线程,将构建热路径和翻译超级块部分作为子线程,主线程和子线程并行工作,构成多线程的动态二进制翻译器系统优化架构; 2)采用双目标代码缓存架构,一个缓存用于存放主线程翻译得到的目标代码基本块,另一个缓存用于存放由子线程重构热路径后得到的目标代码超级块,然后通过全局的哈希表函数来控制主线程和子线程对这两个缓存的读和更新操作; 3)使用硬亲和力将主 线程分配在多核处理器的0号核上执行,将子线程分配在1号核上执行; 4)主线程利用生产者计数器作为索引值,在机器语言级别对一段连续的内存空间不断地压入热点的入口地址,子线程利用消费者计数器作为索引值,在高级语言级别不停地从这段连续的内存 空间去读取热点的入口地址,完成两线程间的通信。
【技术特征摘要】
【专利技术属性】
技术研发人员:顾静辉,管海兵,李晓龙,梁阿磊,郑德恩,
申请(专利权)人:上海交通大学,
类型:发明
国别省市:31[中国|上海]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。