时间:2024-07-28
杨辉兵,管海兵,梁阿磊
传统上,软件开发者已经使用profile(程序轮廓)给编译过程提供反馈。在profile开销和由于profile而自然增加的稳定状态下的性能获益之间,存在一个重要的性能权衡。Profile开销由两部分组成,一是为了放置程序分析探针而需要开始分析程序结构的时间,二是实际收集profile数据的时间。获益是由于更好的优化代码而减少的执行时间[1]。
由于程序的动态行为对程序性能的影响是巨大的,同时动态行为又显著地受到了输入模式的影响,而静态分析是无法预知程序的动态输入模式的,因此有必要对静态编译生成的二进制代码在程序的运行时刻,根据程序的动态输入模式及相关的动态行为进行进一步的优化,从而提高程序的运行效率[2]。
动态优化技术是在应用程序的运行时刻对程序的信息进行统计和分析,并对程序的关键段进行必要的优化,从而提高程序的性能。由于在动态时刻对程序进行统计、分析、优化等都要耗费时间,所以动态优化必须及时发现程序的关键段,并采用快速而高效的分析、优化方式,以得到理想的优化效果[3]。现在大多数虚拟机的动态优化技术是用纯软件的方式实现的,只有少数的系统级的虚拟机可能使用硬件来实现 profiling(可译为”剖分”)技术,如 BOA[3]。
在软硬件协同设计的虚拟机方面,研究的还不多,起步较晚,直到最近十几年,随着虚拟机的广泛应用和发展,企业界和学术界才开始对硬件支持的虚拟化技术做深入研究。正如IBM公司Watson实验室的Leendertvan Doorn在2006年的ACM Virtual Execution Environment 大会上指出[6],硬件支持的虚拟化技术已经成为一种趋势。2008年召开的国际计算机体系结构会议(ISCA),专门为虚拟机的核心技术-动态二进制翻译设立了一个Workshop[7],其三大主题分别为:翻译和代码发现的硬件支持;优化的硬件支持;运行时管理的硬件支持。可见,硬件支持的虚拟化技术已经受到学术界越来越多的关注。最著名的软硬件协同设计虚拟机有IBM公司的DAISY[5], Intel公 司 的 VT(Virtualization Technology)[8]和Transmeta 公司的Crusoe处理器系统[9] [10]。
基于软硬件协同方法的虚拟机设计,结合软硬件协同设计和虚拟机技术,通过在原有的处理器芯片上增加虚拟机协处理器,软件和硬件的紧密耦合来实现进程虚拟机。软硬件协同设计改变了传统基于纯软件的虚拟机的结构和各单元分工,充分发挥软件和硬件各自的优点,用硬件加速来缓解虚拟机的性能瓶颈,从而达到整体系统的更好的性能。相比纯软件实现的虚拟机性能有显著的提高,并提高对用户透明性。
在动态二进制翻译系统中,动态优化对提升系统整体性能是至关重要的。如果在动态优化系统中得到硬件的支持,系统的整体性能将显著的提高。本文针对动态二进制翻译中的优化阶段,使用硬件支持的 profiling技术取代纯软件的profiling技术来降低整个系统的开销,从而提高动态二进制翻译的整体性能。该课题的研究目标是基于自主开发的进程虚拟机 CrossBit[4],采用硬件支持的 profiling技术来降低CrossBit系统的开销,从而提高系统的整体性能。
在通过调研国内外关于硬件支持 Profiling系统的基础上,本文结合动态二进制翻译技术进行了创新设计,使得我们的Profiling系统导致的开销非常小,并且保证了收集到得Profile信息的准确性。同时,我们的系统与传统的基于Instrumentation的硬件支持的Profiling系统相比更具有通用性。这样的基于Instrumentation的方法可以方便的移植到其他的动态二进制翻译系统中去,同时也对以后的使用硬件来支持软件监视功能提供了一个基础平台的作用。
基于 CrossBit的硬件支持 Profiling系统的流程如图 1所示:
图 1 基于CrossBit的硬件支持Profiling系统的流程
在图1中,位于系统总线的左边是一个Profiling系统的软件部分,右边是Profiling系统的硬件部分,通过该总线进行交互。接下来的是对图1的一个流程的具体步骤描述。
具体的步骤为:
1)加载MIPS体系结构的可执行程序到CrossBit的进程空间里,获得此可执行程序的入口地址。然后,以基本块为单位划分程序,一个基本块通常以一条跳转指令或系统调用指令所指向地址的指令为开始,以下一条跳转指令为结束。完成基本块的划分之后,在每个基本块中插入一条目标体系结构的存储指令。其中,源寄存器域的值为装载每个基本块首地址源体系结构程序计数器值的本地寄存器号,地址寄存器域的值为装载有缓冲区模块首地址值的寄存器号,偏移量的值为零。具体在基本块的什么位置插入储存指令是由CrossBit在获得了装载有基本块的首地址源体系结构程序计数器值的寄存器号后确定的,此储存指令插入到含有基本块的首地址源体系结构程序计数器值的寄存器号的指令之后的第一条指令位置处。此寄存器号通过CrossBit里的寄存器分配来满足。
2)在CrossBit中,分配一块内存区域存放一个计数器映射表,计数器映射表如图2所示,计数器映射表包含有源体系结构程序计数器和传统计数器两项,源体系结构程序计数器项是存放每个基本块首地址源体系结构程序计数器值的项,传统计数器项存放的是计数器值。在翻译基本块之前,在 CrossBit中嵌入一小段汇编代码序列来传递计数器映射表的首地址值,该段代码只执行一次,该小段汇编代码的最后一条是目标体系结构的储存指令,其中源寄存器域的值为计数器映射表的首地址。
图2 计数器映射表
其中传统计数器mt_baseaddr变量存放了计数器映射表的首地址值,FIFO_baseaddr变量存放了 FIFO缓冲区的首地址。这段嵌入汇编代码为:
通过 profiling模块获得此计数器映射表的首地址值,profiling模块如图3所示,profiling模块第一次从缓冲区模块取到的值就是计数器映射表的首地址,在profiling模块内保存此值到一个寄存器里,从而可以保证接下来的源体系结构程序计数器值的查找操作。
3)当程序执行到插入的储存指令时,此指令触发缓冲区模块,把每个基本块的首地址源体系结构程序计数器值存储在缓冲区模块中。profiling模块从缓冲区模块中取出此源体系结构程序计数器值,存放在第一寄存器中,根据一个取每个源体系结构程序计数器值的后16位的哈希函数值,加上计数器映射表首地址的值来查找计数器映射表中对应的源体系结构程序计数器值,是否与从缓冲区模块中取到的源体系结构程序计数器值相等;如果相等,则更新第二寄存器中值对应的寄存器映射表中的计数器值;如果不相等,再比较第一寄存器和第二寄存器中的源体系结构程序计数器值的后16位值,如果后16位值不相等,则没有冲突发生,把此第一寄存器中的源体系结构程序计数器值写入计数器映射表的相应表项中,并设置相应计数器的值为1,如果比较的两源体系结构程序计数器值的后16位相等,则冲突发生,写入到本地内存中的下一个计数器值的后16位值不相等的内存中。
图3 专用Profiling硬件模块
4)程序执行过程中,当一个基本块的profile
信息收集完毕后,将计数器映射表中的对应基本块的计数器值和设定的阈值相比较,如果比阈值小,则跳到后面基本块继续执行,如果变量超过阈值,则生成相应的超级块或路径跟踪,从而集中进行程序的动态优化。
评测依据是采用SPEC2000基准测试程序。评测范畴主要针对两个方面:
◆ Profiling的开销分析
◆ 收集到的Profile信息的准确性
试验硬件平台为 XILINX ML300开发板(VIRTEX-II Pro):
CPU:PowerPC405硬核,300MHz(无浮点运算单元)
内存:256MB
磁盘:1GB的CF(CompactFlash)卡
其中,1GB的CF卡分为3个区,分别是FAT16格式的100MB,500MB的LINUX根分区和400MB的SWAP分区。因为该开发板只有256MB的DDR内存,对动态二进制翻译器CrossBit来说,最少需要512MB的内存才能跑起来。所以,定制操作系统内核时,就需要把支持 SWAP分区的工程编译进去。根文件系统制作的时候也需要把 swapon、swapoff等命令编译进去。
软件环境:
本试验采用的测试程序为 SPEC CPU2000,SPEC CPU2000是SPEC组织推出的一套CPU子系统评估软件。
操作系统内核采用的是Linux-xlnx-2.6.26(专门针对此开发板的内核)。
收集Profile信息后做的优化能够带来整体性能的提升,同时自身也有一定的开销,性能的提升减去开销就是热路径优化的最终效果。我们主要对Profiling系统的开销和收集到得Profile信息的准确性很关心。这一节主要对 SPEC 2000中整数测试,集中于gzip, mcf, parser, bzip, twolf, crafty进行测试,观察最终的效果。由于CrossBit的PowerPC后端实现的还不是很完善,有些SPEC程序还跑不通,所以我们有针对性的选择了其中的6个作为我们实验的测试程序。而且它们的输入集都是test input(因为CPU的频率只有300MHz,如果跑reference input,需要很长的时间,由于内存的限制,有的时候可能会出现内存不够的情况),结果见表1。
从表1可以看出,测试集合代表了6种不同类型的程序,涵盖了大部分程序运行的特性。由此可见, 只有 bzip2的开销大于3.0% ,可能是因为需要很大的内存空间,而开发板只有256MB的内存,其它的空间需要通过SWAP从CF卡中交换过来。这样交换的时间久占据了很大部分,从而导致开销不断增大。如果采用512MB的内存,那么由于更少的交换分区操作的原因Profiling系统的开销可能还会更少。其它的SPEC程序都小于等于3.0%,平均也只有2.7%。这对于一般的Profiling系统是一个非常小的开销。在这样的开销下,做Profiling系统是非常有应用前景的。因为一般不做软件Profiling的原因就是因为开销太大。如果需要再进一步分析的话,需要跑通更多的SPEC程序来验证开销结果。
与用纯软件在CrossBit上的实现相比,使用软硬件协同设计的Profiling系统开销更小。但是,这样的比较是在不用硬件平台下进行的,一个是通用的PC机,而另一个是嵌入式开发板,比较的意义不大。但是,在我们的设计中可以在IP核内对Profile信息进行更多的处理。这样,对基于边的和基于路径跟踪的Profiling系统就可以节省更多的开销。这样,就更具有可执行性。
相比于吴佑峰和李永丰做的系统[11] 的开销0.6%来说,本文开发的系统开销是平均2.7%,都是一个非常小的开销。但是,[11]中的系统需要修改IA32的体系结构,虽然加的指令不多,但是那样就失去了通用性。而本文设计开发的系统具有通用性,可以很容易的移植到其他虚拟机系统中,只需要修改一些具体的体系结构相关的设计。
表1 有硬件支持Profiling系统与原始无Profiling系统的开销比较
Profiling的开销来自翻译过的基本块中插入代码的执行。收集到的 Profile信息放在了一个计数器映射表中,可以通过打印出其中的 SPC值和计数值来对比使用纯软件获得的Profile信息。与纯软件Profiling系统收集到的Profile信息进行比较可以有一个较直接的数据比较。在我们的硬件支持的Profiling系统中,通过在每个基本块中插入一条目标体系结构存储指令可以使收集到的 Profile信息准确,因为只要程序正常执行就可以保证每个基本块都可以被记录。但是计数器映射表的大小有限,从而使收集到的 Profile信息与理想收集到的信息有一些不一致。
通过对比,可以看到我们使用软硬件协同设计获得的Profile信息和使用纯软件获得的Profile信息绝大部分一致。我们只需要在IP核中加入一些必要的寄存器,就可以完全传递形成超级块或路径 tracing的信息,而且全部可以在硬件IP核中实现。这样,就可以节省更多的开销。
通过实验,我们已经收集到了准确的 profile信息,并且是以非常低的开销来收集 profile信息。从而,以此技术实现的有超级快的profiling系统可以获得更好的性能。如果需要做更进一步的扩展,可以使用硬件实现怎么利用这些信息进行超级块或路径tracing的工作。
[1] Smith J E and Nair R.Virtual Machines: Versatile Platforms for Systems and Process, Morgan Kaufman, 2005.
[2] 胡坤,动态二进制翻译中的热路径优化[D] .上海交通大学工学硕士论文,2008.12.
[3] Altman E,Gschuind M.etc,BOA:The Architecture of a Binary Translation Processor, Technical Report RC2166S,T J Watson Research Center, 2000.
[4] 包云程,构建基于动态二进制翻译技术的进程虚拟机[D] .上海交通大学工学硕士论文,2006.12.
[5] Ebcioglu K,Altman E.DAISY:Dynamic Compilation for 100% Architectural Compatibility,Proc.of the 24th Int’l Symp.on Computer Architecture, pp.26-37, Jun. 1997.
[6] Leendertvan Doorn, Hardware Virtualization Trends,ACM VEE 2006.
[7] 1st Workshop on Architectural and Microarchitectural Support for Binary Translation,Held in conjunction with the 35th Int'l Symposium on Computer Architecture,2008.
[8] Rich Uhlig,Gil Neiger,Dion Rodgers,Intel virtualization technology,IEEE Comupter Volume:38,2005.
[9] Klaiber A.The Technology Behind Crusoe Processors,Transmeta Technical Brief,2000.
[10] Dehnert J C.et al. The Transmeta Code Morphing Software: Using Speculation, Recovery, and Adaptive Retranslation to Address Real-Life Challenges, Proc. of the 1st Int’l Symp. on Code Generation and Optimizations, pp.15-24, Mar.2003.
[11] Youfeng Wu,YongFong Lee.Hardware-Software Collaborative Techniques for Runtime Profiling and Phase Transition Detection, Journal of Computer Science and Technology,2005.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!