ftrace工具学习笔记

ftrace是一个功能强大的Linux内核跟踪工具,可用于分析内核的行为和性能问题。它可以用来收集各种内核跟踪数据,如函数调用、内存分配、中断处理等。以下是ftrace的一些主要特点和用法:

ftrace是内核自带的跟踪工具,因此无需安装。要启用ftrace,需要在内核编译时启用CONFIG_FUNCTION_TRACER配置选项。可以使用以下命令检查内核是否支持ftrace:

cat /boot/config-$(uname -r) | grep CONFIG_FUNCTION_TRACE

如果输出结果包含"=y"或"=m",则表示内核支持ftrace。

在这里插入图片描述

在/sys/kernel/debug/tracing目录下提供了各种跟踪器和事件:

在这里插入图片描述

可用的ftrace跟踪器:

在这里插入图片描述

使用方法:

cd /sys/kernel/debug/tracing
/* 关闭function-trace可用减少一些延迟:echo 0 > options/function-trace
   可以设置要跟踪的进程:
   	 cat set_ftrace_pid					查看当前指定跟踪的进程
   	 echo 进程的PID > set_ftrace_pid	  指定要跟踪的进程
   	 cat set_ftrace_pid					查看是否指定成功
*/
echo 跟踪器 > current_tracer
echo 1 > tracing_on
// ...等待一会
echo 0 > tracing_on
cat trace

动态ftrace:

若在配置内核时打开了CONFIG_DYNAMIC_FTRACE选项,就可以使用动态ftrace功能

set_ftrace_filter:设置要跟踪的 函数

set_ftrace_notrace:指定不要跟踪的函数

available_filter_functions 文件可以列出当前系统支持的所有函数

“>”表示覆盖过滤器的内容,“>>”表示把新函数添加到过滤器中,但不会覆盖

eg:通过以下代码可以只关注sys_nanosleep()和hrtimer_interrupt()这两个函数:

cd /sys/kernel/debug/tracing
echo sys_nanosleep hrtimer_interrupt > set_ftrace_filter
echo function > current_tracer
echo 1 > tracing_on
usleep 1
echo 0 > tracing_on
cat trace

事件跟踪:

要在available_events文件中查找该跟踪点是否存在,然后把想要跟踪的事件添加到set_event文件中即可。eg:

cd /sys/kernel/debug/tracing
cat available_events | grep sched_stat_runtime		// 查询系统是否支持跟踪点
echo sched:sched_stat_runtime > set_event			// 跟踪找个事件
echo function > current_tracer
echo 1 > tracing_on
// ...等待一会
echo 0 > tracing_on
cat trace

可以使用类似于C语言的表达式对事件进行过滤,对于数字域支持“==、!=、<、<=、>、>=、&”操作符,对于字符串域支持“==、!=、~”操作符。eg:

cd /sys/kernel/debug/tracing/events/sched/sched_stat_runtime
echo 'comm ~ "sh*"' > filter 		//跟踪以sh开头的所有进程
echo  'pid == 725' > filter			//跟踪进程PID为725的进程

你可能感兴趣的:(工具学习笔记,linux)