[发明专利]一种多线程应用场景下的访存指令插桩优化方法有效
申请号: | 201910483083.7 | 申请日: | 2019-06-04 |
公开(公告)号: | CN110187884B | 公开(公告)日: | 2020-10-27 |
发明(设计)人: | 顾乃杰;刘倩玉;苏俊杰 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 陆丽莉;何梅生 |
地址: | 230026 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多线程 应用 场景 指令 优化 方法 | ||
本发明公开了一种多线程应用场景下的访存指令插桩优化方法,是通过基于程序中间代码的静态分析过程从而剔除对涉及非共享内存的访存指令的冗余插桩,该方法具体包括:1、获取中间代码;2、遍历所有模块,函数,基本块及指令;3、获取指令相关信息,根据相应规则更新并记录冗余/非冗余插桩的区分信息;4、根据已记录的区分信息,对访存指令进行选择性插桩。本发明能解决传统访存指令插桩方法中的插桩冗余问题,达到降低访存指令插桩规模及插桩引入的运行时开销的目的。
技术领域
本发明属于访存行为监控中的性能优化技术领域,具体地说是一种多线程应用场景下的访存指令插桩优化方法。
背景技术
在各类面向多线程程序的应用场景下,监控程序的访存行为至关重要。例如:并发漏洞的检测就依赖于对程序访问共享内存行为的追踪及分析。插桩是一种可用于抓取访存信息的有效手段,通过在源程序中插入“探针”(通常是包含函数调用的代码段),并通过探针的执行抛出程序运行时的特征信息(此处特指访存行为信息),从而实现运行阶段的访存行为信息的记录及分析。然而,冗余的指令插桩导致桩函数在运行阶段被多次调用,使得插桩技术在提供监控精准性的同时也引入了严重的性能开销问题。
目前,实际应用的用于降低插桩开销的方法多集中于以所有访存指令为对象使用采样技术直接降低插桩的访存指令规模。然而采样方法通常需要在精准性和性能开销间做出权衡,因而可能在降低插桩开销的同时导致精准性出现下降。并且,采样策略通常依赖于具体任务,部分采样方法还需要额外的硬件平台支持,因此在一定程度上缺乏通用性。
发明内容
本发明是为避免上述现有技术所存在的不足之处,提供一种多线程应用场景下的访存指令插桩优化方法,以期通过一套通用的基于程序中间代码的静态分析流程,能有效剔除对涉及非共享内存的访存指令的插桩,从而在不影响监控精准性的同时降低插桩的访存指令规模,并进一步降低插桩引入的运行时开销。
本发明为解决技术问题采用如下技术方案:
本发明一种多线程应用场景下的访存指令插桩优化方法的特点是按如下步骤进行:
步骤1:编译源程序,获取中间代码;
步骤2:遍历所述中间代码所包含的模块,从所有模块中获取所有函数,再从所有函数中获取所有基本块,并对所有基本块中所包含的指令逐一均执行步骤3和步骤4;
步骤3:获取当前指令的相关信息,包括:指令类型、指令的操作数以及操作数类型;
步骤4:根据所述指令类型,利用相应的指令更新规则更新冗余/非冗余插桩的区分信息,并进行选择性插桩操作。
本发明所述的一种多线程应用场景下的访存指令插桩优化方法的特点也在于:所述冗余/非冗余插桩的区分信息具体为“指向关系”与“指向状态”;
所述“指向关系”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=b”的声明语句,其中,“”表示取地址符号,则表示对象a和对象b间存在指向关系,包括:
若对象b为非指针对象,则表示对象a为一级指针,并将对象a和对象b间的指向关系定义为“NP←P”关系,其中“←”表示指向符号;
若对象b为指针对象,则表示对象a为多级指针,并将对象a和对象b间的指向关系定义为“P←P”关系;
所述“指向状态”定义为:
若源程序中存在将对象b的地址保存在对象a中的声明语句,即形式为“a=b”的声明语句,且对象a和对象b间存在的指向关系为“NP←P”关系,则按如下方式定义对象b的指向状态:
若对象b指向栈对象,则定义对象b的指向状态为false,否则定义对象b的指向状态为true。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910483083.7/2.html,转载请声明来源钻瓜专利网。