BCC是BPF编译器集合,作为一套功能强大的工具可以用于创建丰富的内核跟踪和操作程序。通过扩展BPF实现其功能,是在Linux 3.15中的新功能之一。但是BCC所使用大部分组件都需要Linux 4.1及以上版本。
这些工具不需要第三方内核模块,因为它们完全基于内核内置的 BPF(Berkeley Packet Filter)功能运行,并利用了 Linux 4.x 系列中引入的特性。它们可以用来观察软件的执行情况,帮助用户深入了解系统性能和行为。此外,这些工具由多个性能分析工具组成,每个工具都附带示例文件和手册页,方便用户快速上手和使用。
BCC很适合高级Linux用户,可以帮助用户更轻松使用C的内核检查及Python和lua的前端编写的BPF程序。另外BCC还支持多项任务,如性能分析、监控、网络流量控制等。BCC使用了 Linux 内核4.1或更高版本中添加的功能,并且要求内核应该使用以下标志进行编译:
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
可以使用单个grep命令来检查全部指定内核配置标志,提供全部标志名称作为模式:
grep -E 'CONFIG_BPF=y|CONFIG_BPF_SYSCALL=y|CONFIG_NET_CLS_BPF=m|CONFIG_NET_ACT_BPF=m|CONFIG_BPF_JIT=y|CONFIG_HAVE_BPF_JIT=y|CONFIG_HAVE_EBPF_JIT=y|CONFIG_BPF_EVENTS=y|CONFIG_IKHEADERS=y' /boot/config-$(uname -r)
验证内核标志后,就可以在Linux系统中安装BCC工具。
在Debian主存储库中找到BCC及其工具,源自bpfcc名称为bpfcc-tools、python3-bpfcc、libbpfcc和libbpfcc-dev。
echo deb http://cloudfront.debian.net/debian sid main >> /etc/apt/sources.list
sudo apt-get install -y bpfcc-tools libbpfcc libbpfcc-dev linux-headers-$(uname -r)
Ubuntu上安装BCC工具,可以在Ubuntu universe存储库中找到不同版本:
sudo apt-get 安装 bpfcc-tools linux-headers-$(uname -r)
Fedora 40开始BCC二进制文件开始在标准存储库中使用:
sudo dnf install bcc
RHEL中安装BCC工具,可以在yum存储库中找到:
sudo yum install bcc-tools
Arch Linux中安装BCC工具,可以用pacman命令:
pacman -S bcc bcc-tools python-bcc
OpenSUSE上安装BBC工具:
sudo zypper ref
sudo zypper in bcc-tools bcc-examples
BCC工具都安装在/usr/share/bcc/tools目录下。但是,您也可以从BCC Github存储库(/tools以扩展名结尾)运行它们.py。
ls /usr/share/bcc/tools
用opensnoopopen()工具跟踪所有系统调用:
cd /usr/share/bcc/tools
sudo ./opensnoop
分析 Linux 中的磁盘 I/O 延迟,执行以下命令后等待几分钟再按Ctrl +C结束并查看结果:
sudo./biolatency
用execsnoop工具跟踪正在执行的新进程:
sudo./execsnoop
用ext4slower跟踪ext4文件系统中速度慢于10ms的常见操作,只输出超过阈值的操作:
sudo./ext4slower
使用biosnoop探索磁盘I/O活动:
sudo./biosnoop
分析系统缓存性能:
sudo ./cachestat
用tcpconnect工具每秒监控一次TCP连接:
sudo./tcpconnect