Updated(2012/04/23):
刚看了elc2012的一篇关于使用ftrace调试性能问题的文章,也很不错
https://events.linuxfoundation.org/images/stories/pdf/lf_elc12_kobayashi.pdf
同时, 推荐下面这篇关于在ARM体系结构下使用Ftrace的文章
http://elinux.org/Ftrace_Function_Graph_ARM
以上支持ARM 的Ftrace的patch在commit:376cfa8730c08c0394d0aa1d4a80fd8c9971f323 中引入了kernel的mainline.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ftrace是用来帮助调试kernel,了解kernel中的运行机制及performance相关问题而设计的基于debugfs的kernel内部的trace机制.
Ftrace的一些前提知识:
- mcount, 当gcc的-gp参数启用时,根据不同的系统及其compiler相关,会使得每次函数调用之前,先执行这个叫做mcount的操作.它由对应的profiling library提供.
参见:http://sourceware.org/binutils/docs/gprof/Implementation.html
搭建Ftrace调试环境
- 使用build root编译内核及相应的rootfs
这里需要注意, build root只支持ext2(目前还不支持ext3,ext4), 所以编译好的output/images/下的rootfs是ext2的.
如果用比较新的内核,编出的bzImage中不支持ext2的rootfs引导, 所以会出错.
这里就需要把rootfs.ext2的rootfs image转换成ext3的, 如下:
sudo dd if=/dev/zero of=disk.image bs=1024k count=4096
mkfs.ext3 -F -b 1024 disk.image 4096
sudo mount -o loop d