一、bcc 工具
bcc 的全称:BPF Compiler Collection
BCC(BPF Compiler Collection)是一个用于创建高效的内核跟踪和操作程序的工具包,包含了几个有用的工具和示例。它利用了扩展的BPF(Berkeley Packet Filters),即eBPF,这是一个最早添加到Linux 3.15的新特性。大部分BCC所使用的功能要求Linux 4.1及以上版本。
eBPF被Ingo Molnár描述为:
在这个周期内更有趣的特性之一是能够将eBPF程序(用户定义的、在内核中执行的沙箱化的字节码)附加到kprobes上。这允许对实时内核镜像进行用户定义的仪表化,这些程序永远不会崩溃、挂起或对内核产生负面影响。
BCC使得编写BPF程序更加容易,它使用C语言编写内核仪表化程序(并在LLVM周围包含了一个C语言包装器),并提供了Python和lua的前端。它适用于许多任务,包括性能分析和网络流量控制。
二、bcc 编译
bcc 源码路径:
GitHub - iovisor/bcc: BCC - Tools for BPF
https://github.com/iovisor/bcc/tree/master
2.1 内核配置选项的打开:
In general, to use these features, a Linux kernel version 4.1 or newer is required. In addition, the kernel should have been compiled with the following flags set:
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
# [optional, for tc filters]
CONFIG_NET_CLS_BPF=m
# [optional, for tc actions]
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_JIT=y
# [for Linux kernel versions 4.1 through 4.6]
CONFIG_HAVE_BPF_JIT=y
# [for Linux kernel versions 4.7 and later]
CONFIG_HAVE_EBPF_JIT=y
# [optional, for kprobes]
CONFIG_BPF_EVENTS=y
# Need kernel headers through /sys/kernel/kheaders.tar.xz
CONFIG_IKHEADERS=y
There are a few optional kernel flags needed for running bcc networking examples on vanilla kernel: