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 跟踪器的前端。
对于机能或者内核工程师
一般来说,我们的工作都异常难,因为大年夜多半人或许请求我们去搞清跋假使何去跟踪某个事宜,以及是以须要选择应用哪个跟踪器。为完全懂得一个跟踪器,你平日须要花至少一百多个小时去应用它。懂得所有的 Linux 跟踪器并能在它们之间做出精确的选择是件很难的工作。(我或许是独一接近完成这件事的人)
在这里我建议选择如下,要么:
A)选择一个全能的跟踪器,并以它为标准。这须要在一个测试情况中花大年夜量的时光来搞清跋扈它的细微差别和安然性。我如今的建议是 SystemTap 的最新版本(例如,大年夜 源代码 构建)。我知道有的公司选择的是 LTTng ,尽管它并不是很强大年夜(然则它很安然),但他们也用的很好。如不雅在 sysdig
中添加了跟踪点或者是 kprobes,它也是别的的一个候选者。
B)按我的 Velocity 教程中 的流程图。这意味着尽可能应用 ftrace 或者 perf_events,eBPF 已经集成到内核中了,然后用其它的跟踪器,如 SystemTap/LTTng 作为对 eBPF 的弥补。我今朝在 Netflix 的工作中就是这么做的。
我爱 ftrace,它是内核黑客最好的同伙。它被构建进内毫闼楝它可以或许应用跟踪点、kprobes、以及 uprobes,以供给一些功能:应用可选的过滤器和参数进行事宜跟踪;事宜计数和计时,内核概览;函数流步进。关于它的示例可以查看内核源代码树中的 ftrace.txt。它经由过程 /sys
来治理,是面向单一的 root 用户的(固然你可以应用缓冲实例以让其支撑多用户),它的界面有时很繁琐,然则它比较轻易调校,并且有个前端:ftrace 的重要创建者 Steven Rostedt 设计了一个 trace-cmd,并且我也创建了 perf-tools 集合。我最诟病的就是它不是可编程的,是以,举个例子说,你不克不及保存和获取时光戳、盘似揭捉?迟,以及将其保存为直方图。你须要转储事宜到用户级以便于进行后期处理,这须要花费一些成本。它也许可以经由过程 eBPF 实现可编程。
2. perf_events
perf_events 是 Linux 用户的重要跟踪对象,它的源代码位于 Linux 内毫闼楝一般是经由过程 linux-tools-common 包来添加的。它又称为 perf
,后者指的是它的前端,它相当高效(动态缓存),一般用于跟踪并转储到一个文件中(perf.data),然后可以在之落后行后期处理。它可以做大年夜部分 ftrace 能做的工作。它不克不及进行函数流步进,并且不太轻易调校(而它的安然/缺点检查做的更好一些)。但它可以做分析(采样)、CPU 机能计数、用户级的┞坊转换、以及应用本地变量应用调试信息进行行级跟踪。它也支撑多个并发用户。与 ftrace 一样,它也不是内核可编程的,除非 eBPF 支撑(补丁已经在筹划中)。如不雅只进修一个跟踪器,我建议大年夜家去进修 perf,它可以解决大年夜量的问题,并且它也相当安然。
3. eBPF
可以应用 perf_events 进行 CPU 分析。它可以用一个 火焰图 来形象地表示。比如:
扩大的伯渴攀利包过滤器(eBPF)是一个内核内的虚拟机,可以在事宜上运行法度榜样,它异常高效(JIT)。它可能最终为 ftrace 和 perf_events 供给内核内编程,并可以去加强其它跟踪器。它如今是由 Alexei Starovoitov 开辟的,还没有实现完全的┞符合,然则对于一些令人印象深刻的对象,有些内核版本(比如,4.1)已经支撑了:比如,块设备 I/O 的
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 在进行物联网采购时,很多企业或组织机构缺点地认为物联网成功有一个标准的应用办法。实际情况倒是,没有最好的物联网>>>详细阅读
本文标题:性能分析和调试工具:Linux跟踪器之选
地址:http://www.17bianji.com/lsqh/40662.html
1/2 1