BCC
BCC
目录
基本介绍与环境搭建
安装
这里居然还有WSL的版本,我也才知道怎么下载WSL对应的Linux内核
注意两个BCC版本:标准 Ubuntu Universe 存储库以及 iovisor 的 PPA 中提供了 bcc 的版本。 Ubuntu 软件包的名称略有不同:
- iovisor 软件包在名称中使用
bcc
(例如bcc-tools
) - Ubuntu 软件包使用
bpfcc
(例如bpfcc-tools
)
目前,Ubuntu Universe 和 iovisor 版本的 BCC 软件包都已过时。从源代码构建是获取最新 bcc 打包版本的唯一方法
内核配置
略,看原链接:https://github.com/iovisor/bcc/blob/master/INSTALL.md#kernel-configuration
内核参数说明:https://github.com/iovisor/bcc/blob/master/docs/kernel_config.md
Packages
详见原链接。
sudo apt-get install bpfcc-tools linux-headers-$(uname -r) # ubuntu
这些工具安装在 /sbin
(Ubuntu 18.04 中为 /usr/sbin
)中,扩展名为 -bpfcc
。尝试运行 sudo opensnoop-bpfcc
。
Source
要从源代码构建工具链,需要:
- LLVM 3.7.1 或更高版本,使用 BPF 支持进行编译(默认=打开)
- Clang,与 LLVM 从同一棵树构建
- cmake (>=3.1)、gcc (>=4.7)、flex、bison
- LuaJIT,如果你想要 Lua 支持
- 一些示例中使用的可选工具:arping、netperf 和 iperf
注意要先进行内核配置(看原链接),不然会多很多bug出来。
安装构建依赖项(选择对应的的版本,这里我选择22.04)
# Trusty (14.04 LTS) and older
VER=trusty
echo "deb http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main
deb-src http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main" | \
sudo tee /etc/apt/sources.list.d/llvm.list
wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update
# For Bionic (18.04 LTS)
sudo apt-get -y install zip bison build-essential cmake flex git libedit-dev \
libllvm6.0 llvm-6.0-dev libclang-6.0-dev python zlib1g-dev libelf-dev libfl-dev python3-setuptools \
liblzma-dev arping netperf iperf
# For Focal (20.04.1 LTS)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
libllvm12 llvm-12-dev libclang-12-dev python zlib1g-dev libelf-dev libfl-dev python3-setuptools \
liblzma-dev arping netperf iperf
# For Hirsute (21.04) or Impish (21.10)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
libllvm11 llvm-11-dev libclang-11-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
liblzma-dev arping netperf iperf
# For Jammy (22.04)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
libllvm14 llvm-14-dev libclang-14-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
liblzma-dev libdebuginfod-dev arping netperf iperf
# For other versions
sudo apt-get -y install zip bison build-essential cmake flex git libedit-dev \
libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev python3-setuptools \
liblzma-dev arping netperf iperf
# For Lua support
sudo apt-get -y install luajit luajit-5.1-dev
安装并编译BCC
git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake .. # 使用 CMake 生成 Makefile
make # 编译 BCC
sudo make install # 安装 BCC
cmake -DPYTHON_CMD=python3 .. # 重新使用 CMake 生成 Makefile,这次指定了 Python 3 的路径作为 PYTHON_CMD
pushd src/python/
make # 编译
sudo make install # 安装
popd
(技巧:pushed和cd的区别:会将当前目录的绝对路径存储在一个栈中,以便后续使用 popd 命令弹出栈中的目录。可以方便地处理多层目录结构的切换)
检查是否安装成功
sudo /usr/share/bcc/tools/check-kernel-helper # 检查是否安装成功,成功会显示:Kernel helper loaded successfully
sudo /usr/share/bcc/tools/ext4dist # 运行tools下面的都行,这里检查系统中ext4文件系统延迟
wiki (docs)
没有wiki,但是有docs
DOCS路径:
- /docs
- tutorial.md
- tutorial_bcc_python_developerl.md
- FAQ
- INSTALL.md
- QUICKSTART.md, 提供了一个docker容器供用户尝试bcc
- README.md
快速开始 (容器版)
命令改良版(有容器名方便操控、退出不删除容器)
docker run -it \
--privileged \
-v /lib/modules:/lib/modules:ro \
-v /usr/src:/usr/src:ro \
-v /etc/localtime:/etc/localtime:ro \
--workdir /usr/share/bcc/tools \
--name bcc \
zlim/bcc
原版
docker run -it --rm \
--privileged \
-v /lib/modules:/lib/modules:ro \
-v /usr/src:/usr/src:ro \
-v /etc/localtime:/etc/localtime:ro \
--workdir /usr/share/bcc/tools \
zlim/bcc
这里可能需要先安装docker:apt install docker.io
一些常用命令
# 退出
exit # 或 Ctrl+D
docker ps # 或 docker ps -a
docker start [容器名]
docker exec -it [容器名] /bin/bash # 进入有点麻烦……
链接到当前文件 0
没有文件链接到当前文件