BCC 是基于 BPF 的 Linux IO 分析、监控、网络工具集合。BCC 是使用 C++ 和 Python 编写的,遵循 Apache 开源授权协议。

BPF Compiler Collection (BCC) 是创建高效内核追踪和处理程序的工具包,包含几个有用的工具和用例。BCC 扩展了 BPF (Berkeley Packet Filters) 的用途,BPF 之前被称为 eBPF,是 Linux 3.15 新增的一个新特性。BCC 大部分的功能都要求 Linux 4.1+。

Ingo Molnár 是这样描述 eBPF 的:

eBPF 程序 (用户定义,内核执行沙盒字节码) ,允许在一个 live 内核镜像中用户定义基础设施,不会再发生崩溃、挂起等问题。

BCC 让 BPF 程序更容易编写,使用 C(LLVM 包括一个 C 封装器)编写内核基础设施,前端使用 Python 和 Lua,适用于很多任务,包括性能分析和网络跟踪控制。

截图

这个用例追踪了一个硬盘 I/O 内核功能:

# ./bitehist.py 
Tracing... Hit Ctrl-C to end.
^C
     kbytes          : count     distribution
       0 -> 1        : 3        |                                      |
       2 -> 3        : 0        |                                      |
       4 -> 7        : 211      |**********                            |
       8 -> 15       : 0        |                                      |
      16 -> 31       : 0        |                                      |
      32 -> 63       : 0        |                                      |
      64 -> 127      : 1        |                                      |
     128 -> 255      : 800      |**************************************|=

工具

GitHub 地址:https://github.com/iovisor/bcc