在去年的Linux Plumber大会上,eBPF成为了一个亮点,至少有24个话题提到了eBPF。在之前关于新linux内核的文章中,Bug也有介绍。可以预计,eBPF将成为一种新的技术趋势。作为一个追求新技术的人,你可能不想错过这个趋势。那么请跟随bug,让我们一起学习eBPF技术,并把它作为我们2019年的第一个学习目标。
EBPF包含了很多非常有意义的软件,比如虚拟内核指令集。虽然它源于Berkeley包过滤,是一款网络包过滤软件,但在新的linux内核中得到了扩展和优化。目前可以用在很多方面:网络性能、防火墙、安全、跟踪和设备驱动等。EBPF有许多在线免费文档,用于某些目的,如跟踪,而其他功能和文档需要改进。本文以媒体跟踪为例,介绍了eBPF技术。如果使用tcpdump和strace,那么eBPF就很好用。

eBPF简介
EBPF是添加到linux的最新内核模块。如上所述,它是来自BPF的网络包过滤,但在它进化到eBPF后,添加了JIT,使它实际上是一个虚拟机。现在,通过使用eBPF,我们可以编写运行在磁盘I/O和其他事件上的迷你程序,这些事件可以由内核中的eBPF虚拟机动态执行。
EBPF程序支持自己的字节码语言,在此基础上被编译成内核原生代码,就像BPF程序一样。
EBPF在内核中运行。
EBPF程序对内核内存的访问是有限的。只有内核提供的函数才能获得严格限定的必要内存。
EBPF可以通过BPF地图与用户空之间的程序进行交流。
目前只有llvm是支持ebpf字节码的编译器。即使是gcc编译的内核BPF的示例调用,也必须由llvm编译后才能执行。直接编程eBPF还是很难的。为了方便使用,出现了很多eBPF框架供我们使用。目前,系统跟踪的主要应用框架是bcc和bpftrace。目前这些框架都需要自己手动安装配置,其源代码托管在github上iovisor用户的Linux Foundation下。

EBPF跟踪示例
下面是一个eBPF跟踪工具,可用于显示完整的TCP会话,包括进程ID和指令名称、发送和接收的字节以及持续时间:
密件抄送工具的使用
作为初学者,我们从bcc工具集开始。对于密件抄送安装,请参考官方密件抄送安装说明。注意eBPF是基于一个相对较新的内核,在老版本或者一些追求稳定性的版本中不支持。我们以Ubuntu为例。安装很简单:
sudo apt-get更新
sudo apt-get安装bpfcc工具
sudo/usr/share/bcc/tools/pensnoop

我们通过运行opensnoop来测试工具,以测试是否安装了bcc工具。如果工具执行正常,那么恭喜你,你已经在使用eBPF了。
初学者教程
作为初学者,我们不需要写任何eBPF代码。Bcc附带了70多种工具,我们可以立即使用和联系。最常用的有:execsnoop、opensnoop、ext4slower、biolatency、biosnoop、cachestat、tcpconnect、tcpaccept、tcpretrans、runqlat和profile。
下面是密件抄送跟踪工具的应用示意图。估计很多人都看过,但大部分都没试过用,所以从现在开始就要开始用了:
官方回购仓有完整的用户手册页和样本文件,还有详细的样本截图。
免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报
举报













