无分类 systemtap-探秘五-编译和运行 编译阶段没有什么要说的,唯一要说明的是 stap 生成的内核模块编译起来很耗时。一般来说,整个编译阶段会花上十几二十秒。所以在生成火焰图时,我通常会让 stap 空跑一遍,让它把内核模块编译出来,完成编译阶段后 Ctrl+C 中断掉它。等到正式压测时,再跑一遍。第二次跑的时候,由于可以用上第一次编译出来的内核,花在…
无分类 systemtap-探秘四-函数调用 上一篇文章,我们介绍了 stp 的类型、变量等基本构成元素。本文将讲解 stp 如何把某些语句编译成对应的 C 代码。stp 在编译 if / for 这样的控制语句时,基本上就是原样翻译成 C 代码(除了一点:break 和 contin…
无分类 systemtap-探秘二-由-probe-生成的-C-代码 上一篇文章,我简单地介绍了 systemtap 的工作流程,以及第一、第二个阶段的内容。从这篇文章开始,我们将步入本系列的重头戏 – 负责生成 C 代码的第三阶段。
无分类 systemtap-探秘一 Linux 内核(以下简称内核)提供了 kprobe 和 uprobe 的机制,允许用户通过编写自己的内核模块,挂载特定的事件来执行自己的函数。比如我们可以在 accept 系统调用结束时记录下新创建的 fd;或者在 VFS 读写操作…