论文部分内容阅读
动态插桩系统在程序的执行过程中动态地插入代码以获取程序的执行信息或扩展程序的功能,它被广泛的应用于程序的性能分析、体系结构模拟和错误检查等。然而,动态插桩系统普遍受到性能问题的困扰,特别是在对长时间运行的程序进行在线分析时。当今主流的多核和众核处理器提供了更多计算资源供程序和系统使用,使得显著提高动态插桩系统的速度成为可能。因此,研究如何利用多核和众核的计算资源对动态剖析进行加速成为了一个非常有意义的重要问题。基于两阶段采样和插桩的多线程程序动态剖析的并行加速框架MT-Profiler采用两阶段采样来驱动整个系统的插桩和并行化工作。在第一阶段采样中,MT-Profiler利用PAPI对硬件计数器进行采样,并当采样条件发生时插入检查代码;在第二阶段采样中,检查代码检测第二阶段采样条件,当采样条件满足时创建分片并对分片插入分析代码。分片与被分析程序在多核环境下并行的执行,从而实现分析代码与被分析程序的解耦和并行化; MT-Profiler也对系统的负载进行实时监控,并使用监控信息控制系统的负载均衡和反馈调节两阶段采样的速率。为了降低两阶段采样的开销,MT-Profiler也采取了一系列优化措施:内联插入检查代码汇编指令、寄存器生命周期分析和基于trace的优化技术等。此外,MT-Profiler导出了一套易于使用的、高效的API供工具编写者使用,以使其工具获得并行加速的功能。NPB OPENMP基准测试程序的测试表明:MT-Profiler相对于传统的DynamoRIO动态剖析工具,能够获得2至17倍的性能提升;两阶段采样的准确率平均能达到高于80%的准确度,甚至通过对采样策略的调整能获得更高的准确度。最后,通过对两阶段采样各个阶段采样率的调整实验,可以看出MT-Profiler的两阶段采样具有良好的可调节性。