论文部分内容阅读
动态二进制翻译(Dynamic Binary Translation,DBT)以客户机可执行二进制代码为输入,翻译生成宿主机目标代码,通过在宿主机平台执行翻译生成的代码来模拟客户机应用的语义。DBT系统被广泛应用于跨平台虚拟化、指令集仿真、系统软件分析等重要领域。DBT系统需要维护通过软件模拟的客户机CPU,将客户机指令转换为对模拟CPU的操作。为有效弥补客户机与宿主机硬件架构之间的差异,DBT系统通常使用内存位置来实现这种模拟。但是这种机制也带来了诸多负面影响,并且已成为DBT系统发展所面临的重要挑战。首先是显著的性能下降,与原始执行相比,其性能开销可高达36倍。除影响用户程序的执行效率之外,DBT系统开发维护所需的测试程序的运行时间也大幅加长。而这种基于内存的客户机CPU模拟也将引入大量的内存访问,这对新兴的非易失性内存(Non-volatile Memory,NVM)的写入耐久性带来了挑战。因为此类内存设备的硬件寿命受最大写入次数的限制,过多的内存写入操作将会使设备更快地到达写入次数上限,从而缩短使用寿命。为解决DBT系统所面临的上述问题,本文围绕问题根源和解决方案展开深入研究,通过有效利用宿主机硬件资源和高效的性能回归测试等方法来解决DBT系统的NVM磨损、性能表现和性能测试效率等问题,为DBT系统的发展和应用提供有力的技术支持。首先,针对DBT系统对NVM的写入磨损问题,本文对DBT系统的内存写入行为进行深入分析,指出了DBT系统存在密集且不均衡的内存写入,进一步的研究揭示出这些写入操作主要源自于客户机CPU状态模拟,尤其是模拟访问频率较高的客户机通用寄存器,是造成NVM磨损的主要原因。更为严重的是,这种磨损具有写入量大、粒度细以及严重不均衡等特点,传统的NVM磨损缓解方法无法有效应对DBT系统造成的写入磨损。基于此分析,本文提出了以DBT系统内存行为感知为基础的NVM磨损缓解策略,包括基于客户机CPU存储位置重分配的磨损均衡方法,以及有效利用宿主机寄存器资源的NVM磨损降低方法。该策略在充分理解DBT系统内存行为特性的基础上,通过对内存写入地址和写入频率的细粒度管理,有针对性地将承受大量写入的内存位置均匀分布到更多的存储单元,并将写入最频繁的数据驻留于寄存器。另外,本项研究还解决了寄存器冲突、额外的写入开销等问题。其次,对于DBT系统的低执行效率问题,本文提出了一种基于宿主机SIMD资源的性能优化方法。不同于常规的SIMD利用方法,本文所提出的方法不依赖于数据级的并行性,可使更多的常规应用从中受益。本文方法通过将客户机寄存器映射到宿主机SIMD寄存器,以类似于通用寄存器的方式来利用SIMD寄存器。得益于处理器中SIMD扩展所提供的丰富的存储资源和强大的计算指令,优化后的DBT系统对客户机寄存器数据的处理速度得到了显著提升。实验结果显示本文提出的优化方法可在广泛的应用程序和流行的CPU架构上获得可观的性能加速,加速比可高达2.2倍。针对DBT系统性能测试过高的时间开销,本文提出了自动化生成高效DBT系统性能测试程序的方法。由于DBT系统具有较低的执行效率,因此在开发和维护中需要特别关注系统的性能变化。然而在实践中维护DBT系统的性能表现非常具有挑战性,而性能回归测试是发现性能问题的有效手段。使用传统测试套件来进行DBT系统的性能回归测试将花费数小时甚至数天时间,这种时间开销使其在日常开发中的应用不具有可行性。但是,如不能在代码提交的第一时间发现性能问题,日后的修复工作又将面临更多困难和更大的工作量。为解决DBT系统性能回归测试效率问题,本文提出自动化高效测试程序生成方法,可以基于基本块执行热度,提取源标准测试程序的运行时特征,重新生成更加高效的DBT系统测试程序,在提高测试效率的同时保持了与源程序测试结果的一致性,可在日常开发过程中及时暴露DBT系统的性能变化,以帮助开发者尽早发现问题并采取应对措施。在上述研究的基础上,进一步的研究扩展了这种性能测试方法,将基本块在不同线程中的活动纳入分析范围,通过分析每个基本块在各线程中的活动规律,可以提取出基本块的特征信息,这些特征信息可用于指导测试程序的生成,所生成的测试程序能够模拟源程序的线程行为,并具有灵活的扩展性,可适用于不同性能配置的运行平台。实验结果表明该技术生成的测试程序最高可获得248倍的测试效率提升,并且测试结果与耗时的原始测试程序保持了高度的一致性。