systemtap系列之系统诊断
SystemTap 是监控和跟踪运行中的 Linux 内核的操作的动态方法。SystemTap 没有使用工具构建一个特殊的内核,而是允许您在运行时动态地安装该工具。它通过一个名为Kprobes 的应用编程接口(API)来实现该目的
SystemTap 与一种名为 DTrace 的老技术相似,该技术源于 Sun Solaris 操作系统。
测试内核看它是否支持 SystemTap:
stap -ve ‘probe begin { log(“hello world”) exit() }’
如果不支持就安装一下,yum install systemtap就好了,缺什么就安装什么,光盘自带了。如果出现如下错误:semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo]:答:yum install kernel-debuginfo 安装内核debug信息。
SystemTap 用于检查运行内核的两种方法是 Kprobes 和 返回探针。但是理解任何内核的最关键要素是内核的映射,它提供符号信息(比如函数、变量以及它们的地址)。有了内核映射之后,就可以解决任何符号的地址,以及更改探针的行为。
1.SystemTap 的基本流程
SystemTap 的基本流程,涉及到 3 个交互实用程序和 5 个阶段。流程首先从 SystemTap 脚本开始。您使用 stap 实用程序将 stap 脚本转换成提供探针行为的内核模块。stap 流程从将脚本转换成解析树开始 (pass 1)。然后使用细化(elaboration)步骤 (pass 2) 中关于当前运行的内核的符号信息解析符号。接下来,转换流程将解析树转换成 C 源代码 (pass 3) 并使用解析后的信息和 tapset 脚本(SystemTap 定义的库,包含有用的功能)。stap 的最后步骤是构造使用本地内核模块构建进程的内核模块 (pass 4)。
有了可用的内核模块之后,stap 完成了自己的任务,并将控制权交给其他两个实用程序 SystemTap:staprun 和 stapio。这两个实用程序协调工作,负责将模块安装到内核中并将输出发送到 stdout (pass 5)。如果在 shell 中按组合键 Ctrl-C 或脚本退出,将执行清除进程,这将导致卸载模块并退出所有相关的实用程序。
从内核态/用户态来了解如下: