2008年7月10日星期四

LTT (Linux Trace Toolkits) 简介

LTT (Linux Trace Toolkits) 简介

1概念

1.1功能

LTT是一个用于跟踪系统详细运行状态和流程的工具,它可以跟踪记录系统中的特定事件。这些事件包括:


  • 系统调用的进入和退出

  • 陷阱/中断(Trap / Irq)的进入和退出

  • 进程调度事件

  • 内核定时器

  • 进程管理相关事件:创建 ,唤醒,信号处理等等

  • 文件系统相关事件:Open / Read / Write / Seek / Ioctl 等等

  • 内存管理相关事件:内存分配/释放等

  • 其他事件:IPC / Socket/ 网络 等等


此外 Ltt还提供了自定义和记录需要跟踪的事件类型的函数接口。

1.2结构

LTT主要由4个部分组成:

  • 内核代码补丁:LTT目前还没有纳入正式的官方内核,在内核中的部分代码需要打Patch来获得,主要是修改了上述各类事件的相关代码,添加了Trace的调用代码

  • 内核模块:Trace功能的主要实现部分,记录内核事件,并和用户空间的守护进程进行交互

  • 用户空间的守护进程:从LTT的内核模块中获取事件相关数据,并写入文件。

  • 数据分析应用程序:读取守护进程生成的数据文件,加以分析,并以更加可读的方式(图表等)显示出来。



除此之外,LTT还具备自定义和跟踪用户空间事件的能力。


2使用

所有的安转使用相关的内容,都可以在LTT的官方站点:http://www.opersys.com/ltt/ 找到。仔细阅读里面的文档即可。

(不过,其稳定版本在我这编译起来居然有Error,修改过一些代码后,编译通过,有很多warning,或许是我的编译环境有问题,最终试用的时候图省事,没有去过多研究,使用了MontavistaPackage中现成编译好的版本 8


3体会


LTT的确是一个很有用的工具,灵活的配合其他工具的使用,如stracetime等等,可以作为分析优化系统的performance的一个可行的途径。


值得一提的是,LTT可以通过设置参数,在特定的时间段,筛选所需要记录的事件类型,还可以按进程ID等选择所跟踪的特定对象,通过合理的配置参数,可以使得其对系统所造成的额外负担减少到一个合理的程度,对系统性能的分析基本不会造成明显的干扰因素。


另外LTT提供的自定义和记录需要跟踪的事件类型的函数接口,也使它有了一些拓展能力,可以用来Debug自己编写的内核模块代码。


LTT跟踪用户空间事件的实现,是通过其内核模块中几个特定的IOCTL接口,由用户空间的一个LIB库将其包装成函数,使得其使用方法与其在内核模块中自定义和记录事件类型的函数接口相同。应该说这是一个很巧妙的实现办法,不过对其性能个人还是有些怀疑,因为这样一来,对用户空间事件的纪录就需要经由 用户空间-〉内核空间-〉用户空间 走一趟来实现。


没有评论: