使用ftrace跟踪内核函数
1、内核配置项
linux内核已经支持很多种类treacer了, 本文演示的函数调用图跟踪器(function graph),
更多功能可以网上搜索一下,跟踪对象不同,但用法基本都一样。
2、测试脚本
#!/bin/bash
log1=/mnt/dom_data/database/ftrace_log1.log
log2=/mnt/dom_data/database/ftrace_log2.log
rm -rf $log1 $log2
curlog=$log1
touch $curlog
chmod 777 $curlog
cursize=0
maxsize=$(expr 500 \* 1024 \* 1024)
echo "ftrace log max szie: $maxsize"
################################################################
debugfs=/sys/kernel/debug/tracing
#
echo nop > $debugfs/current_tracer
echo 0 > $debugfs/tracing_on
echo > $debugfs/trace
#
echo function_graph > $debugfs/current_tracer
echo napi_gro_receive > $debugfs/set_graph_function
echo 1 > $debugfs/tracing_on
###############################################################
while [ 1 ]
do
cursize=`ls -l $curlog | awk '{print $5}'`
if [ $cursize -gt $maxsize ]; then
rm -rf $curlog
if [ "$curlog" = "$log1" ]; then
curlog=$log2
else
curlog=$log1
fi
cursize=0
touch $curlog
chmod 777 $curlog
echo "ftrace log name: $curlog"
else
cat $debugfs/trace | head -n 1000 >> $curlog
tm=`date`
echo " @@@@@@@@@@@@@@@ tm: $tm" >> $curlog
echo > $debugfs/trace
sleep 0.5
fi
done
3、跟踪图表
说明1:想要函数详细一点,可以编译内核是加上-g选项。
说明2:开启ftrace相关的驱动模块不用重新编译。