RSS
热门关键字:
当前位置 :| 主页>系统开发>

如何选择一个 Linux Tracer

来源:互联网 作者:Alex 时间:2015-09-28 Tag:Linux   点击:

tracer 是一个高级的性能分析和诊断工具,但是不要让这名词唬住你,如果你使用过 strace 和tcpdump,其实你就已经使用过 tracer 了。系统 tracer 可以获取更多的系统调用和数据包。它们通常能跟踪任意的内核和应用程序。

有太多的 Linux tracer 可以选择。每一种都有其官方的(或非官方的)的卡通的独角兽吉祥物,足够撑起一台"儿童剧"了。

那么我们应该使用哪个 tracer 呢?

我会为两类读者回答这个问题,大部分人和性能/内核工程师。过一段时间这些可能会发生变化,我会持续跟进并补充,大概会一年更新一次。

多数人

多数人 (开发者,系统管理员,开发管理者,运维人员,评测人员,等等) 不关心系统追踪器的细节。下面是对于追踪器你应该知道和做的:

1. 使用perf_events分析CPU性能

使用 perf_events 做 CPU 性能分析。性能指标可以使用 flame graph 等工具做可视化。

1
2
3
git clone --depth 1 https://github.com/brendangregg/FlameGraph
perf record -F 99 -a -g -- sleep 30
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

Linux perf_events (又称 "perf",同命令名) 是 Linux 用户的官方追踪器和性能分析器。内置于内核代码,有很好维护(近来获得快速增强),通常通过 linux 命令行工具包添加。

perf 有很多功能,如果只能推荐一个,我选择 CPU 性能分析。尽管这只是采样,而不是从技术上追踪事件。最难的部分是获取完整的栈和信息,我为 java 和 node.js 做的一个演讲 Linux Profiling at Netflix 中已经说过这个问题

2.了解其他的Tracer

正如我一个朋友说的:“你不需要知道如何操作 X 射线机器,但是一旦你吞了一枚硬币,你得知道这得去做 X 射线”,你应该了解各种 tracer 都能做什么,这样就能在你工作中真正需要 tracer 的时候,你既可以选择稍后学习使用,也可以雇相应的人来完成。

简短来说:几乎所有的东西都可以使用 tracer 来进行分析和跟踪。如,文件系统,网络处理器,硬件驱动器,全部的应用程序。可以看一下我的个人网站上关于 ftrace的文章,还有我写的关于perf_events 文档介绍,可以做为一个追踪(或者性能分析)的例子。

3. 寻求前端支持工具

如果你正想买一个能支持跟踪 Linux 的性能分析工具(有许多卖这类工具的公司)。想像一下,只需要直接点击一下界面就能“洞察”整个系统内核,包括隐藏的不同堆栈位置的热图,我在Monitorama talk 中介绍了一个这样带图形界面的工具。

我开源了一些我自己开发的前端工具,尽管只是 CLI (命令行界面)而不是(图形界面)。这些工具也会让人们更加快速容易的使用 tracer。比如下面的例子,用我的 perf_tool,跟踪一个新进程:

1
2
3
4
5
6
7
# ./execsnoopTracing exec()s. Ctrl-C to end.
   PID   PPID ARGS
 22898  22004 man ls
 22905  22898 preconv -e UTF-8
 22908  22898 pager -s
 22907  22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8
[...]

在 Netflix 上,我们创建了一个 Vector,一个分析工具的实例同时也是 Linux 上的 tracer 的最终前端。

致性能或内核工程师


 

我们的工作变的越来越困难,很多的人会问我们怎么样去追踪,哪种路径可以用!为了正确理解一个路径,你经常需要花上至少100个小时才能做到。理解所有的 linux 路径去做出理性的决定是一个浩大的工程。(我可能是唯一一个接近做到这件事情的人)

这里是我的建议,可以二选其一:

A) 选中一个全能的路径,并且使它标准化,这将涉及花费大量的时间去弄清楚它在测试环境中的细微差别和安全性。我现在推荐 SystemTap 的最新版本(ie,从BPF slides和 dtrace4linux 主要是 Paul Fox 一个人在业余时间完成的,它是 Sun DTrace 的 Linux 版本。它引入瞩目,还有一些 provider 可以运行,但是从某种程度上来说还不完整,更多的是一种实验性的工具(不安全)。我认为,顾忌到许可问题,人们会小心翼翼的为 dtrace4linux 贡献代码:由于当年 Sun 开源DTrace 使用的是 CDDL 协议,而 dtrace4linux 也不大可能最终进入 Linux kernel。Paul 的方法很可能会使其成为一个 add-on。我很乐意看到 Linux 平台上的 DTrace 和这个项目的完成,我认为当我加入 Netflix 后将会花些时间来协助完成这个项目。然而,我还是要继续使用内置的 tracers,如 ftrace 和 perf_events。

8.OL DTrace

Oracle Linux DTrace为了将 DTrace 引入 Linux,特别是 Oracle Linux,做出了很大的努力。这些年来发布的多个版本表明了它的稳定进展。开发者们以一种对这个项目的前景看好的态度谈论着改进 DTrace 测试套件。很多有用的 provider 已经完成了,如:syscall, profile, sdt, proc, sched 以及 USDT。我很期待 fbt(function boundary tracing, 用于内核动态跟踪)的完成,它是 Linux 内核上非常棒的 provider。OL DTrace 最终的成功将取决于人们对运行 Oracle Linux(为技术支持付费)有多大兴趣,另一方面取决于它是否完全开源:它的内核元件是开源的,而我没有看到它的用户级别代码。

9. sysdig

sysdig是一个使用类tcpdump语法来操作系统事件的新tracer,它使用lua提交进程。它很优秀,它见证了系统跟踪领域的变革。它的局限性在于它只在当前进行系统调用,在提交进行时将所有事件转储为用户级别。你可以使用系统调用做很多事情,然而我还是很希望它能支持跟踪点、kprobe和uprobe。我还期待它能支持eBPF做内核摘要。目前,sysdig开发者正在增加容器支持。留意这些内容。



最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册

_×
嵌入式linux中文站
QQ群讨论 微博订阅

微信扫一扫关注我们
随时获取最新开源资讯