LTTng 简介&使用实战
一、LTTng简介
LTTng: (Linux Trace Toolkit Next Generation),它是用于跟踪 Linux 内核、应用程序以及库的系统软件包。LTTng 主要由内核模块和动态链接库(用于应用程序和动态链接库的跟踪)组成。它由一个会话守护进程控制,该守护进程接受来自命令行接口的命令。babeltrace 项目允许将追踪信息翻译成用户可读的日志,并提供一个读追踪库,即 libbabletrace。
LTTng 不仅使用了 Linux 内核中的追踪点(tracepoint)手段,而且可以使用其他各种信息来源,比如kprobes 和 Perf(Linux 中的性能监检测工具)。这对于调试大范围内的bug 是非常有用的,否则这种调试工作将极具挑战性。比如,包括并行系统和实时系统中的性能问题。另外,用户自己定制的工具也可以加入到其中。LTTng 的设计目标是将性能影响最小化,而且在没有跟踪的情况下,对系统的影响应该几乎为零。
LTTng如今已支持多个发行版(Ubuntu/Dibian、Fedora、OpenSUSE、Arch etc.)和多种架构(x86 and x86-64 、ARM 、PowerPC, Sparc, Mips etc.),此外官方还说支持Android和FreeBSD系统。
更多相关知识参见: 《使用LTTng链接内核和用户空间应用程序追踪》
二、LTTng使用实战 -- 安装
2.0 LTTng需要的内核配置(通过读取LTTng-module文档中的README了解)
必选配置:
CONFIG_MODULES 内核模块支持
CONFIG_KALLSYMS 查看wrapper/ 文件。
CONFIG_HIGH_RES_TIMERS 高精度时钟,LTTng2.0的时钟源
CONFIG_TRACEPOINTS 内核追踪点
可选配置(下面的内核配置会影响LTTng的特性):
CONFIG_HAVE_SYSCALL_TRACEPOINTS:
系统调用追踪:
lttng enable-event -k --syscall
lttng enable-event -k -a
CONFIG_PERF_EVENTS: lttng add-context -t perf:*
CONFIG_EVENT_TRACING:
事件追踪,块层的追踪
CONFIG_KPROBES lttng enable-event -k --probe ...
CONFIG_KRETPROBES lttng enable-event -k --function ...
2.1 Ubuntu :
从Ubuntu 12.04开始,LTTng的包可以直接从包管理器的仓库里找到,所以安装变得非常简单:
sudo apt-get install lttng-tools
对于其他版本,需要添加PPA才能使用包管理器安装(https://launchpad.net/~lttng/+archive/ppa):
$ sudo apt-get update
$ sudo apt-get install lttng-tools lttng-modules-dkms babeltrace
2.2 Fedora:
从 Fedora 17开始, UST 和工具包也可以使用yum直接安装:
$ sudo yum install lttng-tools
但是你需要手动的编译lttng模块。(从官网下载一个lttng-modules-***.tar.bz2)
# make modules_install
# depmod -a
2.3 OpenSUSE(或者其他的使用rpm包的Linux发行版)的RPM包:
https://build.opensuse.org/project/show?project=devel%3Atools%3Alttng
2.4 Arch Linux:
https://aur.archlinux.org/packages.php?O=0&K=lttng&do_Search=Go
三、LTTng使用实战 -- 内核追踪
首先我们得确认你是否已经安装了lttng-modules 和lttng-tools。
3.1 内核追踪
列出所有的可追踪内核事件:
# lttng list -k
Kernel events:
-------------
timer_init (loglevel: TRACE_EMERG (0)) (type: tracepoint)
timer_start (loglevel: TRACE_EMERG (0)) (type: tracepoint)
timer_expire_entry (loglevel: TRACE_EMERG (0)) (type: tracepoint)
……
3.2 创建一个追踪会话(session),这个命令会创建一个目录用以存放追踪结果:
# lttng create mysession
Session mysession created.
Traces will be written in /home/dslab/lttng-traces/mysession-20131010-145153
假如你当前已经有了很多的会话,我们可以设置当前追踪会话:
# lttng set-session myothersession
Session set to myothersession
3.3 创建追踪规则(探测点/系统调用 etc.)
1) 追踪内核所有的探测点和所有的系统调用事件(-k/--kernel):
# lttng enable-event -a -k
2)
追踪探测点事件,这里我们追踪
sched_switch和sched_wakeup为例 (-k/--kernel) 。
# lttng enable-event sched_switch,sched_wakeup -k
或者追踪所有的探测点事件:
# lttng enable-event -a -k --tracepoint
3) 追踪所有的系统调用:
# lttng enable-event -a -k --syscall
4) 使用 kprobes 以及 (或) 其他追踪器作为lttng的源:
这是一个LTTng2.0内核追踪器的一个新特性,你可以使用一个动态probe作为源,probe的追踪结果会显示在lttng的追踪结果中。
# lttng enable-event aname -k --probe symbol+0x0
or
# lttng enable-event aname -k --probe 0xffff7260695
可以为probe制定一个准确的地址0xffff7260695或者 symbol+offset。
你也可以使用功能追踪(使用的Ftrace API),追踪结果也会显示在lttng的追踪结果中:
# lttng enable-event aname -k --function <symbol_name>
5) 打开一个事件的上下文信息:
这也是一个新特性,可以让你添加一个事件的上下文信息。比如说你可以添加PID:
# lttng add-context -k -e sched_switch -t pid
你也可以使用多个上下文信息:
# lttng add-context -k -e sched_switch -t pid -t nice -t tid
你可以使用' lttng add-context --help ' 学习所有的上下文格式的用法。
6) 打开事件的Perf计数器:
这也是一个新的很强大的特性,为每个追踪的事件添加Perf计数器数据(使用Perf的API)。下面实例为为每个事件添加CPU周期:
# lttng add-context -k -e sched_switch -t perf:cpu-cycles
注: 你需要使用 add-context 的help学习所有的perf计数器值的含义。
3.4 开始追踪:
# lttng start
追踪结果会写到上面创建会话时创建的文件夹中。比如上面的 :/home/dslab/lttng-traces/mysession-20131010-145153
注意:这个命令会打开所有的追踪,如果你想同时追踪用户空间和内核空间,你在使用这个之前需要设置好所有的追踪规则。
3.5 停止追踪:
# lttng stop
注:在这时候,你可一使用
lttng start 重新追踪,也可以打开/关闭某个事件或者隔段时间再来追踪。当然你也可以查看追踪信息。
3.6 关闭追踪(你的追踪工作已经结束)
# lttng destroy
四、LTTng使用实战 -- 用户空间追踪
待以后添加。
五、LTTng使用实战 -- 追踪数据分析
5.1 分析工具 -- babeltrace
babeltrace是lttng tools中自带的分析工具,很强大。我们可以直接使用babeltrace打开追踪数据,比如上面提到的 /home/dslab/lttng-traces/mysession-20131010-145153。
我们先查看下这个追踪结果下的结构:
# tree /home/dslab/lttng-traces/mysession-20131010-145153
/home/dslab/lttng-traces/mysession-20131010-145153
├── channel0_0
├── channel0_1
├── channel0_2
├── channel0_3
└── metadata
可以看出来追踪目录下只有一个目录,叫做kernel,所以……如果追踪前也打开了用户追踪,那么这里面还会多个追踪目录(用户空间的)。kernel目录下分几个文件保存追踪数据。但是我们使用babeltrace查看追踪结果时不能指定到具体的文件,需要指定到kernel。
# babeltrace /home/dslab/lttng-traces/mysession-20131010-145153
[13:09:27.585271256] (+?.?????????) Raring-Ringtail sys_geteuid: { cpu_id = 2 }, { }
[13:09:27.585273674] (+0.000002418) Raring-Ringtail exit_syscall: { cpu_id = 2 }, { ret = 0 }
[13:09:27.585275886] (+0.000002212) Raring-Ringtail sys_pipe: { cpu_id = 2 }, { fildes = 0xB6588B84 }
[13:09:27.585283170] (+0.000007284) Raring-Ringtail exit_syscall: { cpu_id = 2 }, { ret = 0 }
……
如果我们将babeltrace的输出信息输出到一个文件中,比如# babeltrace /home/dslab/lttng-traces/mysession-20131010-145153 > /tmp/trace 。我们就可以使用shell脚本获取/tmp/trace中的追踪数据并进一步分析。
LTTng 简介&使用实战的更多相关文章
- Tcpcopy简介与实战
码农博客 即将到期,现将博客中部分文章转载到博客园.本文发表与2012年,基于tcpcopy 0.6版本.转载时略有删减. Tcpcopy简介 TCPCopy是一种请求复制(所有基于tcp的packe ...
- mfs分布式系统从理论简介到实战部署
文章前面想说的话:这篇博客写出来真是有点累到了,本来昨天就基本就写好了,放在草稿里面,今天打开就没有了!!唉,就尼玛离我而去了,只有重写,然后中间虚拟机还“爆炸”重启又搞了一会,不容易呀!!希望各位博 ...
- [转]Tcpcopy简介与实战
Tcpcopy简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具 ,其功能是复制在线数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从 ...
- java微服务简介与实战
今年做了一段时间的可见光.ceph存储,后端开发微服务项目,在这记录点东西,也方便大家借鉴查找. springboot的项目实例:https://github.com/ityouknow/spring ...
- Elasticsearch简介与实战
什么是Elasticsearch? Elasticsearch是一个开源的分布式.RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene. Lucene 可以说是 ...
- Blazor Hybrid / MAUI 简介和实战
1. Blazor Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的服务 ...
- 容器中的诊断与分析4——live diagnosis——LTTng
官网地址 LTTng 简介&使用实战 使用LTTng链接内核和用户空间应用程序追踪 简介: LTTng: (Linux Trace Toolkit Next Generation),它是用于跟 ...
- iframe跨域通信实战
"长时间不写文章,开头的方式总是那么出奇的相似",最近很忙,好久没写博客了啊(是不是?). 更换工作已经有三个月有余,这段三个月把过去三年没加过的班都加了一次.收获挺多,发现的问题 ...
- Python--Redis实战:第四章:数据安全与性能保障:第7节:非事务型流水线
之前章节首次介绍multi和exec的时候讨论过它们的”事务“性质:被multi和exec包裹的命令在执行时不会被其他客户端打扰.而使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行 ...
随机推荐
- 什么是马甲APP?怎么用马甲APP导流
一.什么是马甲APP? 马甲APP指的是为了让认识你的人猜不到,在常用的用户名外再注册的其他名字的APP. 二.马甲APP与真实APP的区别是什么?相同的地方是什么? 1.应用名称不一样. 2.关键词 ...
- Android判断界面
仿造微信,第一次进入去引导界面,否则进启动界面. package edu.hpu.init; import edu.hpu.logic.R; import android.app.Activ ...
- [原博客] HEOI2014 行记
HEOI: 河北省信息学竞赛省队选拔赛 HEOI数据标程下载 百度盘 http://pan.baidu.com/s/1qWx7YAo 又到了一年一度的HEOI呢. 我果然还是太弱了呢. Day0 报到 ...
- 【2011 Greater New York Regional 】Problem H: Maximum in the Cycle of 1
也是一个数学题: 主要用到的是排列组合的知识,推推公式就行了,挺简单的: 唯一要注意的是A(0,0)=1: 在这个上面WA了几次,= = 代码: #include<stdio.h> #de ...
- 【UVAlive 3989】 Ladies' Choice (稳定婚姻问题)
Ladies' Choice Teenagers from the local high school have asked you to help them with the organizatio ...
- 单位有b\B\K\M\G的相互转换
计算机存储计量单位 1. 计算机最小存储计量单位是:BIT(位) 2. 计算机最基本存储计量单位是:Bytes(字节) 3. Bit和Bytes的关系:8Bit=1Bytes 4. 其他常用单位:1K ...
- POJ_3321_APPLE_TREE
poj上面的一道求子树上苹果的题目,网上看了很多题解,下面我来回忆一下,基本来源于大神的微博,http://blog.csdn.net/zhang20072844,我来做个搬运工.先将树的n条边上节点 ...
- 最简单的CRC32源码---逐BIT法
CRC其实也就那么回事,却在网上被传得神乎其神.单纯从使用角度来说,只需要搞明白模二除法,再理解一些偷懒优化的技巧,就能写出自己的CRC校验程序. 下面的代码完全是模拟手算过程的,效率是最低的,发出来 ...
- 【Xamarin挖墙脚系列:在VMware11中安装Mac10.11 EI Captain后的vmware tools】
原文:[Xamarin挖墙脚系列:在VMware11中安装Mac10.11 EI Captain后的vmware tools] 如何安装 darwin.iso,百度去吧. 关键是对应版本的darwin ...
- java.math.BigInteger使用心得总结(转)
今天参考课本写了一个关于二进制与十进制转换的程序,程序算法不难,但写完后测试发现不论是二转十还是十转二,对于大于21亿即超过整数范围的数不能很好的转换.都会变成0.参考书籍发现使用使用BigInteg ...