LWN: KernelShark 1.0版本正式发布!

640点击上方蓝色“ Linux News搬运工”关注我们~



KernelShark releases version 1.0

By Jake Edge
July 31, 2019


自从上次LWN发布KernelShark的文章到现在,已经快要过去10年了(上次文章在此:https://lwn.net/Articles/425583/  )。这么长时间中,这个kernel trace可视化工具一直在进行各种重大改进。总体看起来好像是差不多,其实后面的实现代码已经从GTK+ 2.0切换到Qt5了。在7月26日,代码维护者Steven Rostedt宣布发布KernelShark 1.0版本,我们也是时候再看一下这个工具了。


KernelShark是为了帮助分析trace-cmd命令生成的大量kernel trace信息,而创建的一个图形化工具。trace-cmd是ftrace kernel tracer的一个前端工具。Rostedt在近10年前曾经在LWN上提供过关于trace-cmd和ftrace的3篇文章。ftrace能从当前正在运行的kernel里提取出大量的信息,而trace-cmd做的工作则是让用户能更加方便的配置和管理这些trace数据。KernelShark则让分析变得更加方便直观。



640?wx_fmt=png


上面这个截图可以看出这是一个负载不高的系统,KernelShark通过两个主要的展示区域来显示trace.dat里面的数据。trace.dat是trace-cmd缺省输出文件的名字。上面这个区域展示了搜集到的这些trace events,按照每个CPU一行来进行展示(可以更改显示方式)。水平方向的每条线就代表一个CPU上所经历的各种活动,每个活动activity都会按照task的当前状态来标成不同颜色。全高的小矩形标志就是代表所采集到的event,而半高的小矩形则表示这个进程正是running状态,如果仅有横线,则表示这是CPU idle的时间段。


图形显示里,除了CPU状态的展示条外,还可以针对某个task来生成一行,展示task状态。可以通过在"Plot"菜单里选择"Tasks"菜单项,从而指定关注哪些进程,这样就会胜曾相应的task event bar展示。trace所覆盖到的时间段都可以展示出来。刚打开KernelShark的时候,会显示全部时间段的全貌,左右两边就是trace的开始和结束时间点。用户可以放大某一段区间,这样屏幕上展示的就是更小的时间段内,能以更细粒度来查看分析(下面的一个截屏就是从上面截屏进行放大之后抓取的)。这样用户就能快速找到关心的时间点并放大仔细分析。


有几种方式可以达到放大缩小的目的。首先显示区域上方就有对应的按钮。"+"和"-"会进行相应的放大缩小,而"++"和"--"则会放到最大,或者缩到最小。鼠标滚轮也可以用来放大缩小。注意:有时候关注的行数太多,可能显示区域显示不下,那么也会有个垂直滚动条,这时鼠标滚轮仍是进行放大缩小,而不是上下滚动显示区域(这个需要点击滚动条来实现或者干脆最大化KernelShark和显示区域来减少上下滚动需求了)。另一个放大的方法是在显示区域里点击并拖动鼠标,画出一个矩形来圈出锁关心的时间段,松开鼠标后就能放大到展示这段时间了。


下方的显示区域则是一个列表,展示了trace中记录的所有event。每个event都有一个在trace.dat里面的位置顺序编号,还有是在哪个CPU上采集到的,时间戳,进程名和PID,一些参数(中断是否关闭,是否需要reschdule等等),event名称,event的附带信息。在这个显示区域上方有一个简单的搜索输入框,可以搜索任何一列的信息,还有一个“Graph follows”单选框来决定是不是要让上方展示区域显示这个选中的event。


640?wx_fmt=png


如果选中的"Graph follows"(这是缺省状态),每当选中某个event的时候,就会在上方的显示区域出现一根竖线,来表示这个event的发生时间点。用户就能放大以及左右移动一下(使用方向键)看到在这个时间附近发生了什么事情。还有两个marker线,分别命名为A和B。双击上方显示区域就能把这个marker设置过来,不过是设置在点击未知相邻的event上。也就是说双击的鼠标位置需要靠近某个event,否则marker会设置不成功。放置marker可以在下方list显示区域里高亮相应的event。


每个marker都有一个关联的时间戳值,会在图形显示区域上方的按键标志旁边显示出来。如果两个marker都设置了,还会按照100ns的精度来显示它们两者之间的时间差。


"Filter"菜单项里面还有很多过滤功能设置,可以选择在图形化显示区域以及列表显示区域展示或者移除tasks, events, CPUs。高级过滤功能可以实现更细致的过滤,可以直接使用trace-cmd/ftrace所支持的过滤机制。过滤条件也都可以被保存下来供今后方便使用。


KernelShark每次退出的时候会保存当前状态,再次打开时会恢复到上次状态。除此之外,任何时候都可以要求保存当前session,也可以随时把session给load回来。


KernelShark的文档比较简单,不过也基本上涵盖了所有需要用到的功能。"Tools"菜单有多个菜单项应该再加一些解释(例如关于插件、看起来没法正常工作的配色选择器、以及"Record"选项)。有一个编译步骤文档(http://www.kernelshark.org/build.html  )详细介绍了如何在Fedora系统上编译KernelShark,也包含了Ubuntu上的依赖包信息。


KernelShark目前还是在trace-cmd代码仓库里管理,今后有可能会移走。在1.0版本的发布声明中,Rostedt提到他正在把KernelShark的维护权限转交给Yordan Karadzhov,两人在一段时间之内会共同承担维护责任。转交之后,KernelShark的代码也会迁移到自己独立的仓库去。


对需要仔细分析kernel trace的用户来说,KernelShark会是一个非常棒的工具,能大大帮助用户查找到问题线索。KernelShark的开发团队没有在已经达成的荣誉面前止步,Rostedt也专门指出开始针对KernelShark 2.0进行开发了。目前还没有相应的roadmap细节信息,相信任何用户建议(能贡献相应代码最佳)现在都是一个合适的提出时机。


全文完

LWN文章遵循CC BY-SA 4.0许可协议。

极度欢迎将文章分享到朋友圈 
热烈欢迎转载以及基于现有协议修改再创作~


长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~


640?wx_fmt=jpeg

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值