ftrace用法
ftrace官方文档在kernel/Documentation/trace/ftrace.txt文件中。
使用ftrace接口之前,如果系统没有自动挂载debugfs文件系统,则要先手动挂载。
# mount -t debugfs nodev /sys/kernel/debug
ftracer的目录为/sys/kernel/debug/tracing,下面介绍这个目录下的常用文件:
tracing_on,启用/禁用向追踪缓冲区写入功能。1为启用,0为禁用。
available_tracers,当前内核中可用的插件追踪器。
current_tracer,指定当前要使用的插件追踪器。
tracing_cpumask,以十六进制的位掩码指定要作为追踪对象的处理器,例如,指定0xb时仅在处理器0、1、3上进行追踪。
set_ftrace_pid,指定作为追踪对象的进程的PID号。
trace,以文本格式输出内核中追踪缓冲区的内容。
trace_pipe,与trace相同,但是运行时像管道一样,可以在每次事件发生时读出追踪信息,但是读出的内容不能再次读出。
buffer_size_kb,以KB为单位指定各个CPU追踪缓冲区的大小。系统追踪缓冲区的总大小就是这个值乘以CPU的数量。设置buffer_size_kb时,必须设置current_tracer为nop追踪器。
set_ftrace_filter,指定要追踪的函数名称,函数名称仅可以包含一个通配符。
set_ftrace_notrace,指定不要追踪的函数名称。
ftrace可以使用的插件追踪器主要有:
function,函数调用追踪器,可以看出哪个函数何时调用。
function_graph,函数调用图表追踪器,可以看出哪个函数被哪个函数调用,何时返回。
mmiotrace,MMIO( Memory MappedI/O)追踪器,用于Nouveau驱动程序等逆向工程。
blk,block I/O追踪器。
wakeup,进程调度延迟追踪器。
wakeup_rt,与wakeup相同,但以实时进程为对象。
irqsoff,当中断被禁止时,系统无法响应外部事件,造成系统响应延迟,irqsoff跟踪并记录内核中哪些函数禁止了中断,对于其中禁止中断时间最长的,irqsoff将在log文件的第一行标示出来,从而可以迅速定位造成系统响应延迟的原因。
preemptoff,追踪并记录禁止内核抢占的函数,并清晰显示出禁止内核抢占时间最长的函数。
preemptirqsoff,追踪并记录禁止内核抢占和中断时间最长的函数。
sched_switch,进行上下文切换的追踪,可以得知从哪个进程切换到了哪个进程。
nop,不执行任何操作。不使用插件追踪器时指定。
ftrace使用举例:追踪进程调度函数schedule是由哪个函数调用的。
1、 查看available_tracers的内容,确定当前内核是否支持记录函数调用的函数追踪器:
root@thinker:/sys/kernel/debug/tracing# cat available_tracers
blk function_graph mmiotrace wakeup_rtwakeup function nop
可以看到,available_tracers中包含function,即函数追踪器。
2、 一旦将函数追踪器启动,ftrace会记录所有函数的运行情况,但是我们只想查看schedule函数的调用情况,因此先设置函数过滤器,仅记录schedule:
root@thinker:/sys/kernel/debug/tracing#echo schedule > set_ftrace_filter
3、 将函数追踪器function写入current_tracer文件:
root@thinker:/sys/kernel/debug/tracing#echo function > current_tracer
4、 追踪结果可以从trace文件读出:
root@thinker:/sys/kernel/debug/tracing#head trace
# tracer: function
#
# TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | |
bash-29903 [003] 262746.977929: schedule <-sysret_careful
kworker/3:1-239 [003]262746.977937: schedule <-worker_thread
<idle>-0 [000]262746.977940: schedule <-cpu_idle
bash-29903 [003] 262746.977943: schedule <-schedule_timeout
sshd-2562 [000] 262746.977994:schedule <-schedule_hrtimeout_range_clock
<idle>-0 [003]262746.979523: schedule <-cpu_idle
可以看出,bash, kworker,idle,sshd这几个进程的相应函数调用了schedule函数。
可以使用多个函数名称或通配符向过滤器指定模式、模块。例如:
root@thinker:/sys/kernel/debug/tracing#echo ‘irq*’ > set_ftrace_filter
可以记录函数名以irq开头的所有函数调用。
另外,在参数前面加上:mod:,可以仅追踪指定模块中包含的函数(注意,模块必须已经加载)。例如:
root@thinker:/sys/kernel/debug/tracing# echo 'write*:mod:ext3' > set_ftrace_filter
仅追踪ext3模块中包含的以write开头的函数。
要清空trace的内容执行如下命令:
# echo 0 > tracing_on
# echo 0 > trace
# cat trace
trace_printk打印调试信息后,将current_tracer设置为nop,将tracing_on设置为1,调用相应模块执行,即可通过trace文件看到trace_printk打印的信息。
ftrace用法的更多相关文章
- ftrace的使用【转】
转自:http://blog.csdn.net/cybertan/article/details/8258394 This article explains how to set up ftrace ...
- 主机管理+堡垒机系统开发:strace命令用法详解(六)
一.简单介绍 strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进 ...
- 使用 ftrace 调试 Linux 内核【转】
转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...
- ftrace 提供的工具函数
内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通 ...
- 使用 ftrace 调试 Linux 内核,第 3 部分
内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通 ...
- ftrace的使用
This article explains how to set up ftrace and be able to understand how to trace functions. It shou ...
- [转帖]强大的strace命令用法详解
强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...
- 强大的strace命令用法详解
文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和 ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
随机推荐
- java导入Excel表格数据
首先导入Excel数据需要几样东西 第一需要两个依赖包,这里直接是在pom注入依赖 <!--excel--> <dependency> <groupId>org.a ...
- C#在透明窗体WinForm上面画图(电子尺小工具的实现)
前几天要做一个微信调一调的外挂,里面用到了尺子测量距离,然后就自己下载了一个电子尺,最近要升级我的跳一跳外挂,然后就准备自己做一个电子尺,嵌入到我的外挂里面,在嵌入到我的外挂之前,我自己做了一个完整版 ...
- shell脚本,判断给出的字符串是否相等。
第一种方法[root@localhost wyb]# .sh #!/bin/bash #判断给出的字符串是否相等 read -p "Please Input a number:" ...
- 菜鸟学习Cocos2d-x 3.x——内存管理
菜鸟学习Cocos2d-x 3.x——内存管理 2014-12-10 分类:Cocos2d-x / 游戏开发 阅读(394) 评论(6) 亘古不变的东西 到现在,内存已经非常便宜,但是也不是可以 ...
- classList属性和className的区别
className的不方便之处: 在操作类名时,需要通过className属性添加,删除和替换类名.因为className中是一个字符串,所以即使只修改字符串一部分,也必须每次都设置整个字符串的值.( ...
- str.format输出乱码
如该示例,str.Format(L"相似度:%f\t视频名称:%s\t起始位置:%d\r\n",tmp[0].dblSimilarity,tmp[0].szFileName,tmp ...
- BZOJ 4016 最短路径树问题 最短路径树构造+点分治
题目: BZOJ4016最短路径树问题 分析: 大家都说这是一道强行拼出来的题,属于是两种算法的模板题. 我们用dijkstra算法算出1为源点的最短路数组,然后遍历一下建出最短路树. 之后就是裸的点 ...
- 《c++编程思想》关于虚函数在构造函数行为的理解,理解有误,望告知!
<c++编程思想>书上有一段话:在任何构造函数中,可能只是部分形成对象——我们只能知道基类已被初始化,但并不知道哪个类是从这个基类继承来的.然而,虚函数在继承层次上是“向前”和“向外”进行 ...
- Web安全XSS、CSRF和SQL注入
SQL注入 SQL注入是以用户的输入作为sql语句的一部分,如后端接收到用户的请求数据后,不经过数据转义,就把数据拼接到SQL中执行,容易导致SQL的语义被篡改,即受到攻击了. 解决办法是对接收的数据 ...
- python--MySQL权限管理 数据备份还原
一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...