SystemTap知识(一)

简介:

SystemTap是一个系统的跟踪探测工具。它能让用户来跟踪和研究计算机系统在底层的实现。

安装SystemTap需要为你的系统内核安装-devel,-debuginfo,-debuginfo-common包

使用下面的repo可以进行debuginfo的安装

[debuggery]

name=CentOS-$releasever - DebugInfo

baseurl=http://debuginfo.centos.org/releasever/releasever/basearch/

priority=1

需要理解下面几个名词:

instrumentation module -- 由SystemTap脚本编译的内核模块

host system -- 你编译instrumentation 模块的机器

target system -- 你运行instrumentation 模块的机器

target kernel -- target system的内核模块

你可以在一台机器上为其他机器编译trap模块,在目标机上只要安装systemtap-runtime,在宿主机上使用:

stap -r kernel_version script -m module_name

就能生成module_name.ko模块

然后在目标机上运行staprun module_name.ko就可以执行这个trap

stap命令参数:

-v

提供脚本运行的详细输出,可以使用多个的,比如stap -vv script.stp 输出的信息比stap -v script.stp多

-o filename

将输出存到文件filename中

-S size,count

限制输出的文件大小(兆byte算)和文件数目,多个文件会有后缀

-x process ID

这个processID能从脚本中的target()获取

-c 'command'

将target()函数做重命名

-e 'script'

使用script而不是文件作为输入 

-F

使用Flight recorder mode(飞行记录模式),让脚本在后台运行。

我们也可以使用 - 来将标准输入作为stap的输入

echo "probe timer.s(1) {exit()}" | stap -

SystemTap的飞行模式

飞行模式使用-F参数控制的,它并不保存所有的输出,而是只保存最近一段时间的输出,保存的文件大小和文件数量是根据-S来控制的。

飞行模式的监控是运行在后台的。

安装出现问题:

missing x86_64 kernel/module debuginfo

根据这篇文章解决:http://dikar.iteye.com/blog/1477619

SystemTap是如何工作的

每个SystemTap脚本都会创建一个sesssion,这个session按照下面的执行顺序做操作:

1 SystemTap使用tapset库检查这个脚本

2 SystemTap将脚本翻译成C,然后在根据这个C程序生成一个内核模块。(在/tmp/xxxx/xxxx.ko)

3 SystemTap加载这个模块,然后将代码挂载到探针probes(events 和handlers)中

4 当事件发生的时候,相关的代码就执行了

5 当session结束的时候,探针就被销毁

SystemTap的事件可以被归类为两种类型:同步和异步

同步事件包括:

syscall.system_call

vfs.file_operation

kernel.function("function")

kernel.trace("tracepoint")

module("module").function("function")

异步事件包括:

begin

end

timer events

printf




本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3286429.html,如需转载请自行联系原作者


相关文章
Linux笔记之ldd命令详解
`ldd`命令是Linux环境下一个非常实用的工具,用于显示一个程序运行时所需的共享库依赖。它帮助开发者和系统管理员快速诊断程序运行问题,特别是在处理"找不到库文件"或者"错误的库文件版本"等错误时。然而,出于安全的考虑,对于不信任的可执行文件,应该慎用 `ldd`命令,可以考虑使用其他工具如 `objdump`。总的来说,懂得如何妥善且安全地使用 `ldd`,对于维护一个稳定和高效的Linux系统来说,是非常重要的。
201 9
Linux命令`arch`详解
`arch`命令在Linux中用于显示系统CPU架构,如x86_64、ARM等。它在跨平台编程、软件包管理和系统故障排除时很有用。通过`arch`,用户能得知系统运行的架构,但注意这可能与物理CPU架构不同,尤其是在虚拟环境中。在某些系统中,`arch`可能是`uname`命令的别名。了解CPU架构对有效管理系统至关重要。
|
10月前
|
内核编译bpf
内核编译bpf
73 0
SystemTap工具的使用基础
systemtap工具的安装 准备工作 uname -a 查看当前内核版本是哪一个,然后使用 yum install kernel-devel 安装kernel debuginfo包 rpm -qi kernel-devel 找到内核构建的详细信息,然后去对应发布网站上找kernel-debuginfo和kernel-debuginfo-common包。
2081 0