在ubuntu10.10中安装Systemtap
SystemTAP是个好东西。属于居家必备的工具之一。这两天安装了一下,其中还蛮折腾的。
安装步骤:
sudo apt-get install systemtap
Ubuntu Desktop默认没有安装kernel debug info的包,systemtap无法追踪内核信息。查看内核版本
haifeng@Tek-life:~$ uname -a Linux Tek-life 2.6.35-27-generic #48-Ubuntu SMP Tue Feb 22 20:25:29 UTC 2011 i686 GNU/Linux
从这里下载对应的kernel debug info包,安装
sudo dpkg -i linux-image-2.6.35-27-generic-dbgsym_2.6.35-27.48_i386.ddeb
至此内核追踪已经可以执行,但module的信息还需要多做些工作
sudo apt-get install elfutils
将以下内容保存为script.sh,并改变为可执行
1 #!/bin/bash
2 for file in `find /usr/lib/debug -name '*.ko' -print`
3 do
4 buildid=`eu-readelf -n $file| grep Build.ID: | awk '{print $3}'`
5 dir=`echo $buildid | cut -c1-2`
6 fn=`echo $buildid | cut -c3-`
7 rm -rf /usr/lib/debug/.build-id
8 mkdir -p /usr/lib/debug/.build-id/$dir
9 ln -s $file /usr/lib/debug/.build-id/$dir/$fn
10 ln -s $file /usr/lib/debug/.build-id/$dir/${fn}.debug
11 done
基本上就OK了。
测试:
haifeng@Tek-life:~$ stap -l 'module("*").function("*")'
不输出错误信息。
如果输出错误信息的话,核实安装的linux-image-debug那个ddeb包。如果确实不是包的问题,升级KERNEL。我就是升级了KERNEL,才OK的。搞了2天,他妈的,教育网网速太慢了。
再测试Hello World
haifeng@Tek-life:~$ sudo stap -ve 'probe begin{printf("hello"); exit();}'
Pass 1: parsed user script and 72 library script(s) using 18892virt/12732res/1880shr kb, in 140usr/10sys/149real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) using 19156virt/13260res/2008shr kb, in 10usr/0sys/5real ms.
Pass 3: using cached /home/haifeng/.systemtap/cache/60/stap_606e63ba024e3858ea3a7591bcec7a4c_670.c
Pass 4: using cached /home/haifeng/.systemtap/cache/60/stap_606e63ba024e3858ea3a7591bcec7a4c_670.ko
Pass 5: starting run.
helloPass 5: run completed in 0usr/10sys/300real ms.
如果其中哪一个pass出错,同样核实安装的ddeb包是否和内核版本对应。确实对应,那么就升级自己的KERNEL,照此再做一遍。
这两天再对照一些Tutorial,学习一下。
参考:
1.http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu
2.http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html
3.http://blog.yufeng.info/archives/1098
安装步骤:
sudo apt-get install systemtap
Ubuntu Desktop默认没有安装kernel debug info的包,systemtap无法追踪内核信息。查看内核版本
haifeng@Tek-life:~$ uname -a Linux Tek-life 2.6.35-27-generic #48-Ubuntu SMP Tue Feb 22 20:25:29 UTC 2011 i686 GNU/Linux
从这里下载对应的kernel debug info包,安装
sudo dpkg -i linux-image-2.6.35-27-generic-dbgsym_2.6.35-27.48_i386.ddeb
至此内核追踪已经可以执行,但module的信息还需要多做些工作
sudo apt-get install elfutils
将以下内容保存为script.sh,并改变为可执行
1 #!/bin/bash
2 for file in `find /usr/lib/debug -name '*.ko' -print`
3 do
4 buildid=`eu-readelf -n $file| grep Build.ID: | awk '{print $3}'`
5 dir=`echo $buildid | cut -c1-2`
6 fn=`echo $buildid | cut -c3-`
7 rm -rf /usr/lib/debug/.build-id
8 mkdir -p /usr/lib/debug/.build-id/$dir
9 ln -s $file /usr/lib/debug/.build-id/$dir/$fn
10 ln -s $file /usr/lib/debug/.build-id/$dir/${fn}.debug
11 done
基本上就OK了。
测试:
haifeng@Tek-life:~$ stap -l 'module("*").function("*")'
不输出错误信息。
如果输出错误信息的话,核实安装的linux-image-debug那个ddeb包。如果确实不是包的问题,升级KERNEL。我就是升级了KERNEL,才OK的。搞了2天,他妈的,教育网网速太慢了。
再测试Hello World
haifeng@Tek-life:~$ sudo stap -ve 'probe begin{printf("hello"); exit();}'
Pass 1: parsed user script and 72 library script(s) using 18892virt/12732res/1880shr kb, in 140usr/10sys/149real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) using 19156virt/13260res/2008shr kb, in 10usr/0sys/5real ms.
Pass 3: using cached /home/haifeng/.systemtap/cache/60/stap_606e63ba024e3858ea3a7591bcec7a4c_670.c
Pass 4: using cached /home/haifeng/.systemtap/cache/60/stap_606e63ba024e3858ea3a7591bcec7a4c_670.ko
Pass 5: starting run.
helloPass 5: run completed in 0usr/10sys/300real ms.
如果其中哪一个pass出错,同样核实安装的ddeb包是否和内核版本对应。确实对应,那么就升级自己的KERNEL,照此再做一遍。
这两天再对照一些Tutorial,学习一下。
参考:
1.http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu
2.http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html
3.http://blog.yufeng.info/archives/1098
评论
发表评论