内核调试、跟踪与性能分析
1. 静态跟踪点(Tracepoints)
静态跟踪点是内核中用于跟踪和调试的重要工具。它通过TRACE_EVENT宏来插入,该宏会在内核源码中插入一个回调函数,这个回调函数会以跟踪点的参数作为参数被调用。添加了TRACE_EVENT宏的跟踪点允许ftrace或其他跟踪器使用它们,回调函数会将跟踪信息插入到调用跟踪器的环形缓冲区中。
要在 Linux 内核中插入新的跟踪点,需要定义一个特殊格式的头文件。默认情况下,跟踪点内核文件位于include/trace/events,但内核也支持将头文件放在不同的路径,这在定义内核模块中的跟踪点时非常有用。
使用跟踪点时,需要在插入跟踪点的文件中包含头文件,并在一个 C 文件中定义CREATE_TRACE_POINT。以下是一个示例,展示了如何在一个简单的内核模块中添加跟踪点:
hello_world.c文件:
#include <linux/module.h> #include "linux/timer.h" #define CREATE_TRACE_POINTS #include "trace.h" static struct timer_list hello_timer; void hello_timer_callback(unsigne