system tap简单使用

systemtap是一种用于Linux内核检查的工具,允许开发者编写脚本来深入分析运行中的系统活动。它的工作流程包括脚本翻译成C语言、编译成内核模块、加载探测事件并执行处理程序。主要概念包括探测点定义和处理程序,通过探针别名可以定义新的事件。stap命令是systemtap的前端,用于运行和管理脚本。系统支持多种内置事件,并可通过tapset库扩展。探测结果可以使用各种内建函数如printf和thread_indent进行格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习system tap的一些使用,虽然目前还是对于linux内核学习还是很菜的菜鸟,作为处女作,希望大家多喷,欢迎交流指错。参考资料来源http://www.sourceware.org/systemtap/documentation.html

systemtap简介

system tap是一种检查内核运行情况的工具,它允许开发者和管理员编写和重新使用简单脚本深入检查一个正在运行的linux系统的活动。可以快速安全地提取、筛选、总结相关活动的数据,来诊断分析linux内核复杂的性能或者函数功能问题。

systemtap脚本的重要思想是指定事件(events系统活动或者内核函数执行),然后当这些事件触发的时候,需要编写对这些事件进行处理的处理程序(handlers)。其实根据这个systemtap的思想,我就先提出自己的一点见解,要指定事件,你要做的就是对内核有一定的了解,这里更多的涉及内核代码层次的了解多一点,针对处理程序,我们要做的更多的是对systemtap脚本的了解,当然针对我们需要查询的数据,你同样需要掌握内核函数的某些参数。总之,你需要学好linux内核,再来用systemtap就能很好的发挥它的功能作用。

这里列举几种事件,函数的调用和退出,计时器到期,整个systemtap会话开始或者停止等等。处理程序就是语言脚本的一系列声明,这些声明的作用就是当事件发生时,处理程序需要做的工作,一般工作包括从事件执行的上下文中提取数据,用处理程序的内部变量存储这些数据,或者打印出这些数据。

 systemtap的工作过程:

1 .将systemtap脚本翻译成C语言

2,用C语言编译器将上述C语言代码编译成一个内核模块

3.当这个模块被加载,通过钩子函数,它会把所有的探测事件

4.当事件被处理器执行,被编译的处理程序就会运行。最终,当会话结束,钩子函数就会分离,模块也会被移除。

 probe definitions

     probe PROBEPOINT [,PROBEPOINT]       { [STMT ...] }

在上述定义中,探测点(PROBEPOINT)是以一种systemtap脚本语法用来指定事件(events)。在翻译器(translator)中定义了几种探测(PROBEPOINT),在tapset库里面用别名(aliases)也定义了其他的一些探测点。当任何有探测点(PROBEPOINT)指定的事件发生时,STMT语句块就会被执行。

根据每个事件的上下文翻译解释探针处理程序。因为事件与内核代码相关,所以这些上下文可能包括在相关内核源代码中定义的变量。这些被称为目标变量(上下文变量)可以作为变量提供给systemtap脚本,但是这些目标变量访问的时候需要加前缀$。当然这些目标变量只有在编译器编译内核的时候没有被优化,而是保存下来才能被访问。

PS:名词解释

Tapset库:类似于C库,systemtap建立了一个脚本库供大家使用,一个”tapset”就是一个为了复用而设计的脚本,通过安装到一个指定的目录下,缺省情况下的目录是/usr/share/systemtap/tapset.大家可以用vi编辑器直接访问某些脚本函数,进一步了解systemtap机制。

别名(aliases):使用别名,可以定义新的探测点(PROBEPOINT)。一个探针别名(alias)与探针定义很相似,而不是在已知的探测点去使探针发生,它是对已存在的探测点以别名的方式定义了一个新的探针点。新定义的探针别名可以适用于一个或多个已存在的探针别名。多个别名可以共享相同的潜在的探测点。举个例子:

probe socket.sendmsg = kernel.function ("sock_sendmsg") { ... }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值