ftrace利器之trace-cmd和kernelshark
关键词:ftrace、trace-cmd、kernelshark。
trace-cmd是设置读取ftrace的命令行工具,kernelshark既可以记录数据,也可以图形化分析结果。
trace-cmd和kernelshark源码都由kernel.org维护在trace-cmd.git。
kernekshark还有自己的帮助网站kernelshark.org。
1. trace-cmd编译安装
可以通过git下载trace-cmd相关代码:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git
trace-cmd编译安装也比较简单
make install--------------------------只安装trace-cmd
make install_gui--------------------安装trace-cmd和kernelshark
2. trace-cmd的使用
2.1 trace-cmd -h
trace-cmd version 2.5.6
usage:
trace-cmd [COMMAND] ...commands:
record - record a trace into a trace.dat file
start - start tracing without recording into a file
extract - extract a trace from the kernel------------------------------------------------将系统当前的trace保存到trace.dat中。
stop - stop the kernel from recording trace data-------------------------------------start和stop配置使用,用于开始停止录制。
restart - restart the kernel trace data recording
show - show the contents of the kernel tracing buffer------------------------------读取/sys/kernel/debug/tracing/trace
reset - disable all kernel tracing and clear the trace buffers----------------------对ftrace的设置和ring buffer复位
report - read out the trace stored in a trace.dat file
stream - Start tracing and read the output directly----------------------------------实时在shell中显式ftrace结果
profile - Start profiling and read the output directly
hist - show a historgram of the trace.dat information-------------------------------对trace.dat显式统计信息
stat - show the status of the running tracing (ftrace) system---------------------显示当前ftrace的events、ring buffer等情况
split - parse a trace.dat file into smaller file(s)
options - list the plugin options available for trace-cmd report
listen - listen on a network socket for trace clients
list - list the available events, plugins or options-------------------------------------显示当前ftrace支持的events、tracers、options
restore - restore a crashed record
snapshot - take snapshot of running trace
stack - output, enable or disable kernel stack tracing------------------------------echo 1 > /proc/sys/kernel/stack_tracer_enabled打开stack_tracer,然后trace-cmd stack查看
check-events - parse trace event formats
trace-cmd record开始记录,ctrl+c停止记录并保存到trace.dat中。
还可以通过trace-cmd reset对各种设置进行复位,然后trace-cmd start进行录制,trace-cmd stop停止录制,trace-cmd extract将数据保存到trace.dat中。
2.2 trace-cmd record
trace-cmd record用于录制ftrace信息,通过如下选项可以指定只跟踪特定traceevents,或者跟踪特定pid、或者跟踪特定funtion/function_graph函数。
还可以设置cpumask、ringbuffer大小等等。
usage:
trace-cmd record [-v][-e event [-f filter]][-p plugin][-F][-d][-D][-o file] \
[-s usecs][-O option ][-l func][-g func][-n func] \
[-P pid][-N host:port][-t][-r prio][-b size][-B buf][command ...]
[-m max][-C clock]
-e run command with event enabled-----------------------------------------------------指定只抓取某一事件或者某一类型事件
-f filter for previous -e event
-R trigger for previous -e event
-p run command with plugin enabled
-F filter only on the given process
-P trace the given pid like -F for the command-----------------------------------------只跟踪某一个pid
-c also trace the childen of -F
-C set the trace clock
-T do a stacktrace on all events
-l filter function name
-g set graph function
-n do not trace function
-m max size per CPU in kilobytes
-M set CPU mask to trace------------------------------------------------------------------这5个选项对应ftrace的设置set_ftrace_filter、set_graph_function、set_ftrace_notrace、buffer_size_kb、tracing_cpumask。
-v will negate all -e after it (disable those events)
-d disable function tracer when running
-D Full disable of function tracing (for all users)
-o data output file [default trace.dat]-----------------------------------------------------指定输出文件名
-O option to enable (or disable)
-r real time priority to run the capture threads
-s sleep interval between recording (in usecs) [default: 1000]--------------------默认1ms保存一次数据,加大有利于将此操作频率。1000000变成1s写一次数据。
-S used with --profile, to enable only events in command line
-N host:port to connect to (see listen)
-t used with -N, forces use of tcp in live trace
-b change kernel buffersize (in kilobytes per CPU)-----------------------------------改变ring buffer大小
-B create sub buffer and folling events will be enabled here
-k do not reset the buffers after tracing.
-i do not fail if an event is not found
--profile enable tracing options needed for report --profile
--func-stack perform a stack trace for function tracer
(use with caution)
如下表示只记录sched_switch和sched_wakeup两个时间,每1s写入一次数据。
trace-cmd record -e sched_switch -e sched_wakeup -s 1000000
一个不大不小的坑!正确发送ctrl+c
在使用trace-cmd record记录事件的时候,通过ctrl+c可以停止记录。
但是如果在adb shell中,ctrl+c可能优先退出了shell,而没有正常停止trace-cmd record。
最终在目录下只有trace.dat.cpuX的文件,这些文件是中间文件,kernelshark是无法解析的
解决方法有两种,一是在串口console中ctrl+c,另一种是通过kill发送SIGINT信号kill -2 pid。
3. kernelshark的使用
3.1 kernelshark记录事件
通过菜单栏执行Capture->Record,会弹出Capture对话框。
常用的设置有Events和Plugin,比如这里设置了sched_switch和sched_wakeup两个事件,选择了function_graph插件。
然后开始Run,停止使用Stop。
Close关闭后,可以在Kenelshark中查看细节。
可以看出这里不光显示了sched_switch和sched_wakeup事件,同时还显示了function_graph函数调用。

3.2 kernelshark分析结果
3.2.1 加载trace.dat
通过File->Load data加载trace-cmd record记录的数据,然后开始分析。
默认界面如下:

3.2.2 过滤功能
通常获取的数据需要进行一些过滤,才能发现问题。
filter提供了丰富的过滤功能,在File中提供了加载Load filter、保存Save filter、到处Export filter等功能。
具体在Filter中提供三类功能,分别针对事件events、进程tasks、CPU;还有两个菜单决定是否同步显式Filter结果。
task-打开某些task、关闭某些task;event-事件过滤以及高级事件过滤;cpu-开关某些cpu跟踪。
以最常用的场景,只想关注某些进程的内容:

3.4 图表扩展
横轴图表提供了两大类:CPU和进程。
cpu-每个cpu一个plot;task-可以选择不同task,一个task一个plot。
比如在Filter->tasks选定fork_rr_affinity,同时在Plots中选定fork_rr_affinity之后。
增加了4个plots,并且CUP0只显示了fork_rr_affinity相关执行情况,CPU1没有调度,说明affinity设置成功。

3.4 其它功能
还有一些其它有用的功能,比如搜索功能,选定要搜索的Column,文本框中输入字符串即可。
勾选graph follows,可以实现Plots和下面的events同步显示。

鼠标向右拖拉可以放大选择区域;向左拖拉则缩小当前选择区域。
向左向右调整显式区域,有助于全局或者细节查看执行情况。
4. 小结
trace-cmd作为ftrace的前端,对ftrace的各种设置进行包装,同时能对结果进行处理,极大地提高了ftrace的使用效率。
kernelshark作为trace-cmd的前端,借助图形化,灵活的filter,缩放功能,能更有效的帮助分析,高效的得到结果。
ftrace利器之trace-cmd和kernelshark的更多相关文章
- Win下必备利器之Cmder
诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...
- C#编程利器之二:结构与枚举(Structure and enumeration)【转】
C#编程利器之二:结构与枚举(Structure and enumeration) 在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着 ...
- 大数据并行计算利器之MPI/OpenMP
大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出 ...
- php调试利器之phpdbg
信海龙的博客 php调试利器之phpdbg 简介 PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境. PHPDBG的目标是成为一个轻量级.强大.易用的 ...
- 后台任务利器之Hangfire
后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4 ...
- Android开发利器之ActivityTracker
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/113 Android开发利器之ActivityTracke ...
- windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集)
原文:windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集) Log Parser Studio是一个强大的IIS图形分析工具,值得推荐. 1. 安装L ...
- .NET Core开源组件:后台任务利器之Hangfire 转载 https://www.cnblogs.com/chenug/p/6655636.html
.NET Core开源组件:后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的D ...
- Java高并发编程基础三大利器之CountDownLatch
引言 上一篇文章我们介绍了AQS的信号量Semaphore<Java高并发编程基础三大利器之Semaphore>,接下来应该轮到CountDownLatch了. 什么是CountDownL ...
随机推荐
- blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...
- 【读书笔记】iOS-访问网络
iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用.大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. "在访问网络失败 ...
- ssms2014和ssms2016版本错误定位的区别
偶尔对比起2016以下的版本(比如ssms2014),ssms2016有一个小地方有区别.就是报错的行号有区别 举个例子,下面同样的语句在ssms2014和ssms2016里面运行.就是如下的效果 C ...
- CentOS7的/tmp目录自动清理规则
CentOS6以下系统(含)使用watchtmp + cron来实现定时清理临时文件的效果,这点在CentOS7发生了变化. 在CentOS7下,系统使用systemd管理易变与临时文件,与之相关的系 ...
- Appium学习——Appium工作原理
appium的工具原理 Appium-client>>>>Appium-server>>>>移动设备 ========================= ...
- Json Schema的使用
直接上案例: 在Web Api通讯中,客户端发送json数据,服务端反序列化json(json与某个类形成对应关系),在某些情况下,需要校验其上传的json是否合法. 服务端是使用Json.net(n ...
- IDEA 如何查看一个类里面的所有方法
快捷键:Alt+7
- Ubuntu + python pip遇到的问题
今天在做Flask跨源资源共享(CORS)的时候在安装flask-cors时遇到了两个问题. 首先我是在Ubuntu环境下安装的,整了好一会才弄得出来,现在整理一下. 安装flask-cors pip ...
- Azkaban-2.5.0-部署与常见案例
该文章是基于 Hadoop2.7.6_01_部署 . Hive-1.2.1_01_安装部署 进行的 1. 前言 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核 ...
- debian 7.4 安装配置
改用debian差不多有半年了,之前一直用fedora,大概3年多,虽然软件包都很新,总是不太稳定,有点软件用着用着就自动退出了. 换了debain之后,这半年还真是一直没啥问题,这里总结了一些安装配 ...