Linux trace技术发展已久,经常看到很多的专业术语,从perf LTTng systemtap bpftrace tracepoint trace BCC bpf ebpf等词汇,这些关键的词汇有着怎样的联系和关联,通过下面的这个图可以直观的认识到这几种关键技术的内在联系。

    整个内核的跟踪和观测技术分为前端工具,内核框架支持、内核数据源支持三个部分。前端工具通常作为使用者,在跟踪内核或者观测内核时使用的命令,比如:bpftrace BCC 等工具,内核态框架是指支持上述前端工具的内核框架,比如systemtap的内核模块、BPF的字节码等。内核态数据源是指对内核跟踪或者观测获取到的数据方法,比如kprobe和tracepoint等。

BPF25.png

上述内核观测和跟踪技术的调用和对应关系如下:通过下面的关系图,可以看到清晰的调用关系。
BPF26.png

前面的文章中介绍过Systemtap bpftrace perf在内核跟踪和观测方面的使用方法和实例。这里我们从几个维度对这几种技术进行对比分析。

BPF27.png

  从上面的几个维度的对比中我们能够更清晰的认识各类技术的特点。对于eBPF来说在各个方面都是占有优势的,

可编程性:BPF是可针对内核可编程的,

内核内置:也是现在内核中内置的技术框架,无需专门安装,只需要打开内核的配置参数。

安全性:BPF对编写的程序有安全检查

内核版本的支持范围:BPF主要针对高版本的内核,越高版本的内核,其包含的功能越丰富,对于老版本的内核不友好,但是systemtap基本通吃所有内核版本。

性能:在性能上这几种技术类型没有本质的区别

生态:BPF作为最近几年新发展的技术,围绕BPF的各类开源工具以及生态发展较快,其他几类工具基本处于发展停滞阶段。

功能丰富度:BPF除了内核的观测和跟踪方面发挥作用外,在内核安全、网络性能提升等多方向上都有对应的解决方案

使用便捷性:根据bpf技术的bpftrace bpf-tool等工具提供了大量可直接使用的工具,并且可以结合高级的编程语言python go进行开发,在使用便捷性上也有极大的优势。