4使用SYSTEMTAP分析函数问题.docx

SYSTEMTAP redbook 1. 简介 1.1SystemTap是什么 Systemtap是一个允许开发人员和系统管理人员来观察内核甚至是用户空间应用程序的行为的工具,可以用于发现程序错误,性能问题,或者仅仅是想了解系统如何工作。 使用systemtap可以很容易的收集或者观察系统工作信息,帮着用户收集简单的或者复杂问题所需要的系统信息。 以前debug或者分析内核,我们需要做一系列的工作,包括kernel backup, modification,compile,install,reboot。现在systemtap省略了这些繁琐的过程,不需要做这些就可以获得或者观察我们所需要的数据。 Systemtap使用一个script脚本,该脚本使用systemtap特定的语言实现,通过命令行的方式来启动。Systemtap脚本语言跟C语言很类似。后面我们会讲到。 Systemtap使用script脚本,通过命令行来进行输入输出。输入的script脚本是用systemtap语言产生的,该语言跟C语言类似。后面会讲述。Script脚本主要是由一系列的子程序和probe插入点组成。Script脚本可以收集和计算数据,也可以打印格式化后的信息到标准输出。 基本上,systemtap一般有下面几个步骤: 将.stp 脚本翻译成C源代码,并且作为一个kernel的module。 将C文件编译成module(.ko) 将module加载到kernel里 Module会运行,报告script脚本里面说明的事件信息。 Stap从kernel收集这些信息并且打印到终端。 如果给stap一个CTRL-C或者是达到脚本里面说明的结束点,会unload module。脚本运行结束。 我们可以让stap保存.c或者.ko文件 1.2SystemTap的目标 Systemtap的主要目的是追踪(Trace)特定时间点的系统events。 Trace,意味着当event出现的时候就立即调用子程序(在systemtap的script脚本里面定义)。 Event可以是系统可以暂停并调用处理函数的任意点。Systemtap常使用的有包括下面几个: Function enter and exit A timer expiring A network packet reception 处理函数一个典型的应用就是收集并显示event出现的时候的重要数据,比如说函数参数,变量值,memory地址信息,等等。数据整理收集也是systemtap一个非常常见的应用。 简单的说,systemtap是一个用来更好的理解系统或者应该如何工作,并且识别可能的问题或者找出错误位置的工具。 1.3.SystemTap的应用场合 Linux系统上运行一个application通常有两部分:内核空间和用户空间。Systemtap可以在一个script脚本里面实现这两个空间的trace。 以前,systemtap对用户空间的trace基本不提供支持。但是最近的版本已经把对用户空间的trace的支持加入了进来。但在SLES 10 SP2 and RHEL5.2里还是不提供用户空间的支持。这里不做讲述对用户空间的trace。 Systemtap主要用于调试kernel,由于它简单易用,已经成为最通用的一个tracing 工具,。它不需要内核重新配置,编译和重新安装。 由于这个特性,它也用于生产服务器,可以透明的并且非中断的来查找不易复现的bug。它不需要服务器停止或者重新初始化。 1.4使用systemtap进行probing 在systemtap中,probing意味着在执行代码的特定的位置打印或者收集调试信息。比如说,每当一个函数被调用的时候,我们可以打印他的参数或者是返回值。我们也可以在特定的上下文中打印这些数据。或者说,我们也可以统计一个函数调用的次数等等。 Probing是观察系统表现的最常见并且是最容易的方法。大多数的kernel function都可以被插入断点,所以每当函数被调用或者返回时,它都会调用我们的代码来显示或者追踪我们所需要的信息。 同时,systemtap也提供了很多有用的build-in函数。这对我们进行统计或者处理性能方面的问题很有帮助。 1.5 安全性 Systemtap提供了很多安全机制。这里不再赘述。 另外一个主要特性,也是我们再做异常测试的时候需要用到的特性,就是systemtap允许我们插入内嵌的C代码,或者在kerenl运行的时候修改内核数据,这就破坏了安全性。这就是guru模式,该模式可以更改内核数据,所以会有很大的risk。 2. systemtap技术纵览 2.1 systemtap 架构 Systemtap的实现依赖两种技术,kprobes和ke

文档评论(0)

1亿VIP精品文档

相关文档