MCPcopy Create free account
hub / github.com/iovisor/bcc

github.com/iovisor/bcc @v0.37.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.37.0 ↗ · + Follow
5,580 symbols 15,568 edges 592 files 262 documented · 5% updated 12d agov0.37.0 · 2026-07-02★ 22,547894 open issues

Browse by type

Functions 3,732 Types & classes 1,846 Endpoints 2
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

BCC Logo

BPF Compiler Collection (BCC)

BCC is a toolkit for creating efficient kernel tracing and manipulation programs, and includes several useful tools and examples. It makes use of extended BPF (Berkeley Packet Filters), formally known as eBPF, a new feature that was first added to Linux 3.15. Much of what BCC uses requires Linux 4.1 and above.

eBPF was described by Ingo Molnár as:

One of the more interesting features in this cycle is the ability to attach eBPF programs (user-defined, sandboxed bytecode executed by the kernel) to kprobes. This allows user-defined instrumentation on a live kernel image that can never crash, hang or interfere with the kernel negatively.

BCC makes BPF programs easier to write, with kernel instrumentation in C (and includes a C wrapper around LLVM), and front-ends in Python and lua. It is suited for many tasks, including performance analysis and network traffic control.

Screenshot

This example traces a disk I/O kernel function, and populates an in-kernel power-of-2 histogram of the I/O size. For efficiency, only the histogram summary is returned to user-level.

# ./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      |**************************************|

The above output shows a bimodal distribution, where the largest mode of 800 I/O was between 128 and 255 Kbytes in size.

See the source: bitehist.py. What this traces, what this stores, and how the data is presented, can be entirely customized. This shows only some of many possible capabilities.

Installing

See INSTALL.md for installation steps on your platform.

FAQ

See FAQ.txt for the most common troubleshoot questions.

Reference guide

See docs/reference_guide.md for the reference guide to the bcc and bcc/BPF APIs.

Contents

Some of these are single files that contain both C and Python, others have a pair of .c and .py files, and some are directories of files.

Tracing

Examples

Tools

Memory and Process Tools
Performance and Time Tools
CPU and Scheduler Tools
Network and Sockets Tools

Core symbols most depended-on inside this repo

Shape

Method 1,980
Function 1,752
Class 1,709
Enum 137
Route 2

Languages

C++38%
C37%
Python24%

Modules by API surface

tests/cc/catch.hpp973 symbols
src/python/bcc/table.py148 symbols
src/python/bcc/__init__.py120 symbols
src/cc/api/BPFTable.h95 symbols
tests/python/test_tools_smoke.py94 symbols
src/cc/libbpf.c90 symbols
tests/python/test_clang.py86 symbols
libbpf-tools/trace_helpers.c83 symbols
src/cc/api/BPF.cc63 symbols
src/cc/bpf_module.cc60 symbols
src/cc/frontends/clang/b_frontend_action.cc55 symbols
src/cc/bcc_elf.c55 symbols

For agents

$ claude mcp add bcc \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page