Linux内核性能分析利器之trace-cmd和kernelshark

栏目: 服务器 · Linux · 发布时间: 5年前

内容简介:trace-cmd是设置读取ftrace的命令行工具,kernelshark既可以记录数据,也可以图形化分析结果。trace-cmd和kernelshark源码都由kernel.org维护在kernekshark还有自己的帮助网站

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函数调用。

Linux内核性能分析利器之trace-cmd和kernelshark

3.2 kernelshark分析结果

3.2.1 加载trace.dat

通过File->Load data加载trace-cmd record记录的数据,然后开始分析。

默认界面如下:

Linux内核性能分析利器之trace-cmd和kernelshark

3.2.2 过滤功能

通常获取的数据需要进行一些过滤,才能发现问题。

filter提供了丰富的过滤功能,在File中提供了加载Load filter、保存Save filter、到处Export filter等功能。

具体在Filter中提供三类功能,分别针对事件events、进程tasks、CPU;还有两个菜单决定是否同步显式Filter结果。

task-打开某些task、关闭某些task;event-事件过滤以及高级事件过滤;cpu-开关某些cpu跟踪。

以最常用的场景,只想关注某些进程的内容:

Linux内核性能分析利器之trace-cmd和kernelshark

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设置成功。

Linux内核性能分析利器之trace-cmd和kernelshark

3.4 其它功能

还有一些其它有用的功能,比如搜索功能,选定要搜索的Column,文本框中输入字符串即可。

勾选 graph follows ,可以实现Plots和下面的events同步显示。

Linux内核性能分析利器之trace-cmd和kernelshark

鼠标向右拖拉可以放大选择区域;向左拖拉则缩小当前选择区域。

向左向右调整显式区域,有助于全局或者细节查看执行情况。

4. 小结

trace-cmd作为ftrace的前端,对ftrace的各种设置进行包装,同时能对结果进行处理,极大地提高了ftrace的使用效率。

kernelshark作为trace-cmd的前端,借助图形化,灵活的filter,缩放功能,能更有效的帮助分析,高效的得到结果。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-04/158309.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

思考的乐趣

思考的乐趣

顾森 / 人民邮电出版社 / 2012-6 / 45.00元

本书是一个疯狂数学爱好者的数学笔记,面向所有喜爱数学的读者。从2005年7月开始,作者已经写了连续六年的博客,积累下来了大量的数学文章。 部分文章内容被广泛关注,在网络上大量分享转载。 这本书有意挑选了初等的话题,让大大小小的读者都能没有障碍地阅读。文章内容新,让有数学背景的人也会发现很多自己没见过的初等问题。 文章是独立的。一篇文章一个话题,文章与文章之间基本不会做参考,读者可以随意跳着看......一起来看看 《思考的乐趣》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器