软件监测方法、装置以及系统的制作方法

文档序号:6358994阅读:110来源:国知局
专利名称:软件监测方法、装置以及系统的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种软件监测方法、装置以及系统。
背景技术
在使用并行技术的软件系统中,例如应用多线程技术以及多核处理技术等软件系统,软件系统中程序的串行部分成为整个系统性能的瓶颈因素,而串行部分主要体现在各种锁程序所保护的临界区,包括信号量,互斥锁程序(Mutex),自旋锁程序(Spinlock),开关中断,读写锁程序等等。如果能够详细、准确地统计串行部分中各种锁程序的相关信息, 则可以为整个软件系统的性能优化提供数据依据。在现有技术条件下常见的一种软件监测方法是通过软件自身会给锁程序函数进行插桩替换的方式来统计软件的锁程序使用信息。一些软件软件监测工具如Valgrind Mutextrace等,普遍使用这种软件插桩的软件监测技术,其过程一般为先替换或增加被检测目标软件的某段指令(通常为函数的入口和返回)为检测程序的指令;再强制执行检测程序,以获取锁程序的相关信息。然而,这种软件监测方式需要修改目标程序并强制执行监测程序,这样在运行软件系统的同时增加系统的运行负担。对于较为大型的软件系统来说,软件系统具有数量庞大的临界区和对应管理临界区的锁程序,而利用现有的插桩方式进行软件分析的话,插桩的数量也是非常庞大的,这样致使软件系统通常会在高负荷的环境下进行测试和数据搜集,带来较大的系统开销,并严重干扰应用程序的正常运行,追踪导致难以统计出完整而详细的锁程序使用信息。

发明内容
本发明实施例提供一种软件监测方法、装置以及系统,以解决分析过程中引入过大系统开销而致使难以统计出完整而详细的锁程序使用信息的问题。本发明实施例提供一种软件监测方法,所述方法在锁程序被调用或释放时记录锁程序地址以及使用所述锁程序的线程标识;将所述锁程序地址以及使用所述锁程序的线程标识进行编码转化为内存地址,并通过所述内存地址访问内存;侦听内存总线以识别所述内存地址的访问内存信号并获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及时间信息;根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间。本发明实施例提供一种软件监测装置,包括动态库模块、通信模块、侦听模块以及数据分析模块,其中所述动态库模块用于记录锁程序地址以及使用所述锁程序的线程标识;所述通信模块用于将所述锁程序地址以及使用所述锁程序的线程标识进行编码转化为内存地址并通过所述内存地址访问内存;所述侦听模块用于侦听内存总线以识别所述内存地址的访问内存信号并获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及时间信息;所述数据分析模块用于根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间。上述软件监测方法、装置以及系统只有锁程序地址以及线程标识的记录和编码转化地址通过软件部分实现,而侦听、存储以及分析方面均可以利用旁路硬件来实现,例如, 通过在内存接口或插槽上插卡来实现对内存总线的侦听、存储以及分析,而旁路硬件无需对目标程序做任何修改,不占用系统的处理资源,也不影响应用程序的运行环境,从而通过这样软硬结合的方式可以在不带来额外的系统开销的情况下,实现对应系统性能的分析。


图1所示为本发明一实施例中软件监测方法的流程示意图。图2所示为本发明一实施例中软件监测方法的一部分流程示意图。图3所示为本发明一实施例中软件监测方法的另一部分流程示意图。图4所示为本发明另一实施例中软件监测装置的示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员所获得的所有其他实施例,都属于本发明保护的范围。本发明一实施例提供一种软件监测方法,主要对系统串行部分的相关信息进行分析,所述分析方法采用非插桩式分析,不对目标程序做任何修改,也不依赖于具体的软件或硬件平台,在分析运行过程中不引入额外的开销,从而可以充分记录分析所需的信息。如图1所示,本发明实施例提供一种软件监测方法,包括步骤101、记录锁程序地址以及线程标识,所述线程标识用于标识使用所述锁程序的线程;步骤102、根据所述锁程序地址以及使用所述锁程序线程标识获得内存地址,并通过所述内存地址访问内存;步骤103、侦听内存总线以识别所述访问内存的信号并根据所述信号获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及访问时间信息;步骤104、根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间,所述占用锁程序的时间根据所述访问时间信息确定。上述步骤101中,所述记录锁程序地址以及线程标识是在重载与所述锁程序相关的函数的过程中进行。通过动态插桩的方式或在程序运行前通过加载自定义的动态连接库的方式,将与锁程序相关的函数进行重载,在重载函数中获取并记录锁程序地址以及线程 t示i只,所: ! 可以为 mutex 白勺 pthread_mutex_init>pthread_mutex_lock>pthread_ mutex_unlock> pthread_mutex_trylock 以及 pthread—mutex—destroy 等函数。上述步骤102中,由于Cache (高速缓冲存储器)的作用,多线程程序中对锁程序的访问可能不需要访问内存而直接被在Cache中命中,而通过对内存总线的侦听而在内存总线上监控访问内存操作,没有办法捕获到不访问内存的锁程序变量,而在本实施例的软硬件协同检测机制中,根据锁程序的地址以及使用所述锁程序的线程标识获得一个内存地址,所述获取的内存地址的方式可以是映射或者根据自定编码规则进行编码转换,而所述内存地址被设置为不可缓存,这样通过所述内存地址的访问内存均都能被总线侦听模块捕获到。当锁程序被调用或释放时,便触发动态库模块记录锁程序的地址以及占用的线程标识,再由通信模块将所述锁程序地址以及占用锁程序的线程标识转化为内存地址,以在所述锁程序被调用的时候通过所述内存地址进行访问内存,所述内存地址为内存上的物理地址。其中,将所述锁程序地址以及使用所述锁程序的线程标识通过编码转化为内存地址也是主要映射表来实现的,其中具体的编码如下
ReservedThread IDLock AddrLock FlagReserved其中字段表示的含义为Thread ID 线程标识在线程映射表中的偏移;Lock Addr 锁程序地址在锁程序地址映射表中的偏移;Lock Flag 加锁程序或解锁程序的标志;Reservedl 保留域,指向预留物理内存区域的首地址;Reserved2 保留域,内存控制器将物理内存地址的低3位屏蔽。如图2所述上述步骤103中,侦听内存总线并获取所述内存总线中访问地址为所述内存地址的访问信息的步骤进一步包括步骤201、预留物理地址空间,以将对所述锁程序地址以及使用所述锁程序的线程标识编码转化的内存地址的访问内存映射为对所述物理地址空间的访问内存;步骤202、侦听所述内存总线中的访问地址并判断所述访问地址是否映射在所述物理地址空间内;步骤203、根据判断结果,将映射在所述物理地址空间内的访问内存地址以及时间信息封装成追踪信息;步骤204、传输所述追踪信息。上述步骤201中,由被检测主机预留所述物理地址空间,用于作为在侦听过程中所述内存地址的访问内存信号捕获的映射空间,所述物理地址空间由若干段段物理地址组成,在本实施例中所述物理地址空间为两段段物理地址。上述步骤202和203中,通过映射表识别出内存总线中访问地址为所述锁程序地址以及使用所述锁程序的线程标识编码转化的内存地址,也就是对所述编码转化的内存地址的访问内存映射为对所述物理地址空间的访问内存,具体过程是,如果所述访问内存地址通过映射表的映射在所述所述物理地址空间内,则所述访问内存地址为所述编码转化的内存地址,则捕获所述访问内存地址并记录时间信息进行封装。所述线程的ID以及锁程序编码转化的内存地址。上述识别所述锁程序地址以及使用所述锁程序的线程标识编码转化的内存地址的步骤在其它实施例中也可以通过注册表来实现,所述注册表储存有所有所述锁程序地址以及使用所述锁程序的线程标识编码转化的内存地址,通过逐一遍历比对来识别当前访问内存地址是否为由所述锁程序相关信息编码转换的地址。所述映射在所述物理地址空间内的访问内存地址为锁程序地址以及使用所述锁程序的线程标识的编码结果,因此所述映射在所述物理地址空间内的访问内存地址可以反解码为锁程序地址以及线程标识。所述追踪信息还包括序列号(SN)与读写信息(RW),所述时间信息为时间戳(TS),所述追踪信息可采用如下格式
权利要求
1.一种软件监测方法,其特征在于,所述方法包括记录锁程序地址以及线程标识,所述线程标识用于标识使用所述锁程序的线程; 根据所述锁程序地址以及所述线程标识获得内存地址,并通过所述内存地址访问内存;侦听内存总线以识别所述访问内存的信号并根据所述信号获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及访问时间信息;根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、 使用所述锁程序的线程标识以及所述线程占用锁程序的时间,所述占用锁程序的时间根据所述访问时间信息确定。
2.根据权利要求1所述的方法,其特征在于,所述侦听内存总线以识别所述内存地址的访问内存信号并获取所述锁程序的追踪信息的步骤中,通过映射表识别出内存总线中访问地址为所述锁程序地址以及使用所述锁程序的线程标识所转化的内存地址的访问内存信号。
3.根据权利要求2所述的方法,其特征在于,所述侦听内存总线以识别所述内存地址的访问内存信号并获取所述锁程序的追踪信息包括预留物理地址空间,通过所述映射表建立所述锁程序地址以及使用所述锁程序的线程标识编码转化的内存地址与所述物理地址空间之间的映射关系;侦听所述内存总线中的访问地址并判断所述访问地址是否映射在所述物理地址空间内;根据判断结果,将映射在所述物理地址空间内的访问内存地址以及时间信息封装成追 fe^fn 息;传输所述追踪信息。
4.根据权利要求3项所述的方法,其特征在于,所述物理地址空间为两段段物理地址, 所述锁程序以及使用所述锁程序的线程标识编码转化的内存地址通过映射表映射为所述两段段物理地址区间内的物理地址。
5.根据权利要求3所述的方法,其特征在于,在所述根据所述追踪信息获得所述锁程序的使用信息的步骤之前还包括接收并存储所述追踪信息,以供离线分析。
6.根据权利要求1所述的方法,其特征在于,根据所述锁程序地址以及所述线程标识获得内存地址包括将所述锁程序地址以及所述线程标识编码转化或者映射为内存地址。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述追踪信息中的时间信息包括调用和释放锁程序的时间戳。
8.根据权利要求7所述的方法,其特征在于,所述调用和释放锁程序的时间戳是通过时钟记录侦听到所述锁程序因被调用或释放而被编码转化为内存地址并访问内存的时间。
9.根据权利要求7所述的方法,其特征在于,所述追踪信息还包括 序列号,用于在分析的时候检测有没有丢失;读写信息,用于标识此次访问内存是读或者写。
10.根据权利要求9所述的方法,其特征在于,所述追踪信息主要由所述锁程序以及使用所述锁程序的线程标识编码转化的内存地址、所述时间信息、序列号以及读写信息封装而成。
11.根据权利要求1至6任一项所述的方法,其特征在于,所述记录锁程序地址以及线程标识包括通过所述锁程序被调用时重载与锁程序相关的函数中记录所述锁程序地址以及使用所述锁程序的线程标识。
12.根据权利要求11所述的方法,其特征在于,所述与所述锁程序相关的函数通过动态插桩的方式或者在程序运行前加载自定义的动态连接库的方式进行重载。
13.根据权利要求1至6任一项所述的方法,其特征在于,所述根据所述追踪信息获得所述锁程序的使用信息包括根据所述追踪信息获得所述内存地址以及所述锁程序的时间信息;将所述内存地址反解码为锁程序地址以及使用所述锁程序的线程标识,获得所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间信息。
14.一种软件监测装置,其特征在于,所述装置包括动态库模块,记录锁程序地址以及线程标识,所述线程标识用于标识使用所述锁程序的线程;通信模块,根据所述锁程序地址以及所述线程标识获得内存地址,并通过所述内存地址访问内存;侦听模块,侦听内存总线以识别所述访问内存的信号并根据所述信号获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及访问时间信息;数据分析模块,根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间,所述占用锁程序的时间根据所述访问时间信息确定。
15.根据权利要求14所述的装置,其特征在于,所述侦听模块包括一映射表,通过所述映射表识别出内存总线中访问地址为所述锁程序地址以及使用所述锁程序的线程标识所转化的内存地址。
16.根据权利要求15所述的装置,其特征在于,所述侦听模块在侦听内存总线以识别所述内存地址的访问内存信号并获取所述锁程序的追踪信息的过程中包括先由被监测主机预留物理地址空间,以通过所述映射表将所述锁程序地址以及使用所述锁程序的线程标识编码转化的内存地址映射到所述物理地址空间内;再通过侦听来识别内存总线中映射在所述物理地址空间内的访问地址,并将所述访问地址以及时间信息封装成追踪信息;最后向数据分析模块发送所述追踪信息。
17.根据权利要求16所述的装置,其特征在于,所述物理地址空间为两段段物理地址, 所述线程的ID以及锁程序编码转化的内存地址通过映射表映射为所述两段段物理地址区间内的物理地址。
18.根据权利要求14所述的装置,其特征在于,还包括一数据存储模块,用于接受并存储所述侦听模块产生的所述追踪信息。
19.根据权利要求14至18任一项所述的装置,其特征在于,所述追踪信息中的时间信息包括调用和释放锁程序的时间戳。
20.根据权利要求19所述的装置,其特征在于,所述侦听模块还包括一时钟,以通过时钟校准记录捕获所述锁程序因被调用或释放时被编码转化为内存地址进行访问内存而产生访问内存信号的时间,从而获得所述锁程序被调用或释放的时间戳。
21.根据权利要求14至18任一项所述的装置,其特征在于,所述动态库模块通过所述锁程序被调用时重载与锁程序相关的函数中记录所述锁程序地址以及使用所述锁程序的线程标识。
22.根据权利要求20所述的装置,其特征在于,所述与所述锁程序相关的函数通过动态插桩的方式或在程序运行前加载自定义的动态连接库的方式进行重载。
23.根据权利要求14至18任一项所述的装置,其特征在于,所述数据分析模块根据所述追踪信息获得所述内存地址以及所述锁程序的时间信息,再将所述内存地址反解码为锁程序地址以及使用所述锁程序的线程标识,从而获得所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间信息。
24.一种软件监测系统,包括一软件检测装置以及软件执行主体,所述软件执行主体用于执行一软件程序,其特征在于,所述软件检测装置用于记录所述软件程序的锁程序地址以及线程标识,所述线程标识用于标识使用所述锁程序的线程;根据所述锁程序地址以及所述线程标识获得内存地址,并通过所述内存地址访问内存;侦听内存总线以识别所述访问内存的信号并根据所述信号获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及访问时间信息;根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间, 所述占用锁程序的时间根据所述访问时间信息确定。
全文摘要
一种软件监测方法、装置以及系统,在锁程序被调用或释放时记录锁程序地址以及线程标识,所述线程标识用于标识使用所述锁程序的线程;根据所述锁程序地址以及所述线程标识获得内存地址,并通过所述内存地址访问内存;侦听内存总线以识别所述访问内存的信号并根据所述信号获取所述锁程序的追踪信息,所述锁程序的追踪信息包括所述内存地址以及访问时间信息;根据所述追踪信息获得所述锁程序的使用信息,所述使用信息包括所述锁程序地址、使用所述锁程序的线程标识以及所述线程占用锁程序的时间,所述占用锁程序的时间根据所述访问时间信息确定。
文档编号G06F11/36GK102301343SQ201180001455
公开日2011年12月28日 申请日期2011年6月14日 优先权日2011年6月14日
发明者余加强, 崔泽汉, 张文力, 王超, 陈明宇, 黄永兵 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1