bcc使用python编译ebpf程序,有没有什么方便的方法可以从这些python脚本中生成一个可执行文件,这样我就可以在没有安装clang和llvm环境的服务器上运行这些跟踪程序?
TL;DR.否,不含BCC。不过,您可能需要查看BPF CO-RE。
对于bcc,有两件事可以解决。首先,您需要使用BPF程序和映射编译一个对象文件,这些映射将在您的目标系统上工作(与Linux BPF加载程序相同的内核版本/标头和约定(。其次,您需要BCC的用户空间组件来识别并使用此程序和映射。
BCC当前未启用这两项功能。我的fork有一个(有点过时(分支,在那里我实现了对将对象文件转储到磁盘的支持,并使用约定将其加载到Linux内核中。出于您的目的,这可能是不完整的,因为我只是试图在内核中加载程序;我不在乎后来发生了什么。也有一些工作在远程系统上运行BCC的工具,但我不知道目前的情况如何
正在进行的一项工作将解决您的问题,即BPF CO-REBPF CO-RE允许您开发可跨Linux版本移植的BPF跟踪程序因此,您不需要使用目标系统的Linux头进行编译,也不再需要LLVM/Clang。这项工作背后的团队最近发表了两篇关于BPF CO-RE的原则和内部工作以及它将如何应用于BCC的工具的文章。