搞不懂为何有了kprobe了还要systemtap?
systemtap能实现的功能kprobe都可以做,为了用systemtap学习那一套语言有些麻烦,因为不是经常用,过几天就忘了,搞不懂为何有了kprobe了还要systemtap?大家来谈一谈,你为何用systemtap ?
我能想到的:
1.systemtap较用kprobe写内核模块要安全一些,systemtap脚本不会把系统crash掉,而写内核模块就不一样了. 至于为何安全,还没去研究,毕竟systemtap后面也是要加载内核模块的。
2.systemtap适合不会内核编程,C语言的人士使用,脚本语言方便。说实话对于我这种熟悉内核编程的人来说,相反systemtap还麻烦一些。
todaygood 发表于 2014-01-01 20:52 static/image/common/back.gif
systemtap能实现的功能kprobe都可以做,为了用systemtap学习那一套语言有些麻烦,因为不是经常用,过几天就忘 ...
systemtap是kprobe的封装,基于kprobe实现。个人觉得主要优势为:
1、动态调试。这个应该是最大的亮点,不需更换内核、不需重启系统,对于需要在线调试问题的应用场景来说,这个功能是非常关键的,因为很多疑难故障都是很难复现的,如果重启或更换内核,可能就很难再捕获到故障信息了。
2、使用方便,如你所说,由于使用脚本,不用手动编写C代码,模块编译以及加载模块的操作。只需要按照systemtap的语法编写脚本,其他操作都由Systemtap自动完成。 1, kprobe也有。
2.使用方便是相对的,现网问题如使用systemtap需要安装一些包才行(一般现网环境不会去默认装这些运行时用不到的包),而kprobe模块拷过去直接插入,哪个方便?
个人觉得那一套语法是硬伤。 脚本语言和C语言编程,无非就是脚本语言少了make而已,脚本语言一样的要调测,运行效率还低。 todaygood 发表于 2014-01-02 09:01 static/image/common/back.gif
1, kprobe也有。
2.使用方便是相对的,现网问题如使用systemtap需要安装一些包才行(一般现网环境不会去默 ...
呵呵,对kprobe不熟,systemtap用得比较多,systemtap与kprobe同源,个人理解systemtap的设计初衷应该主要是提高易用性。 差很多。systemtap支援regular expression,並且和symbol file做結合。
比方說我想要hook所有drivers/usb/host/ehci-hcd.c裡面的function。沒有systemtap,你只能一個一個自己用kprobe寫上去。
有systemtap他可以幫你作search,並且幫你把kprobe的code編譯好。probe kernel.function("*@drivers/usb/host/ehci-hcd.c").call {
printf("%s --> %s\n", thread_indent(1), probefunc())
}
probe kernel.function("*@drivers/usb/host/ehci-hcd.c").return {
printf("%s <-- %s\n", thread_indent(-1), probefunc())
} 回复 1# todaygood
脚本语言做的事C都能做,为什么还要有脚本语言呢?
systemtap适合不会内核编程,C语言的人士使用,脚本语言方便。说实话对于我这种熟悉内核编程的人来说,相反systemtap还麻烦一些
搞笑了。真正Unix界出来的内核开发者(不是那些学完了C就去啃内核的人)绝大部分都熟悉某种脚本语言,而且极有可能甚于你对C语言的熟悉。 Systemtap是为了要达到Dtrace的效果而做出来的,我记得它底层基本全是由kprobe实现的,现在或许加上了ftrace和perf,但整体体验还是不好。
(光是想象一下它底层做的事我就头皮发麻)
Systemtap各方面来看都与Dtrace相差甚远。现在有人在做ktap,设计思路与Dtrace类似,脚本最后编译为字节码,内核里实现一个小解释器。这比Systemtap轻量多了。用独立的程序编译脚本,而不像Systemtap需要一整套GCC工具链。生成的字节码平台无关,理论上来说跨平台调试很方便。社区的反应也非常好。Greg力推这个东西,上次擅自把它加到了staging树中。不过代码没经review就进去了遭Ingo质疑,最后被revert了。但是整个讨论中,perf方面的Ingo, ftrace方面的Steven Rostedt,都支持这个东西。Linus在讨论中也未表示反对。目前来看,ktap进主线应该只是时间问题。
PS: ktap作者是华为的工程师,这个feature要是进去了,可能是中国开发者贡献中,能见度最高的一个。
https://lwn.net/Articles/551314/
http://events.linuxfoundation.org/sites/events/files/lcjpcojp13_zhangwei.pdf tempname2 发表于 2014-01-02 23:13 static/image/common/back.gif
Systemtap是为了要达到Dtrace的效果而做出来的,我记得它底层基本全是由kprobe实现的,现在或许加上了ftrac ...
这个工具看起来还不错,学习学习,新工具不断出,学习时间越发少,不得不感叹一下,快跟不上节奏咯~ 回复 8# tempname2
在 某公司干, 我呸。