轉自:http://blog.chinaunix.net/uid-22954220-id-5763682.html
BCC(BPF編譯器集合 )是用於創建足智多謀內核跟蹤和操作程序一套功能強大的適當的工具和示例文件。 它采用擴展BPF( Berkeley包過濾器 ),最初被稱為eBPF這是在Linux的3.15的新功能之一。
實際上,大多數由BCC使用的組件的需要的Linux 4.1或以上,和其值得注意的特點包括:
- 不需要第三方內核模塊,因為所有的工具都基於內置於內核的BPF工作,BCC使用Linux 4.x系列中添加的功能。
- 支持觀察軟件執行。
- 包括幾個性能分析工具與示例文件和手冊頁。
建議閱讀: 20命令行工具來監控Linux性能
最適合用於高級Linux用戶,BCC可以很容易地編寫使用內核儀表用C BPF程序和前端在Python和Lua。此外,它支持多個任務,如性能分析,監控,網絡流量控制等。
如何在Linux系統中安裝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 CONFIG_HAVE_BPF_JIT=y# [optional, for kprobes] CONFIG_BPF_EVENTS=y
要檢查你的核心標志,查看文件了/proc/config.gz或在下面的例子中運行命令:
howtoing@HowToing ~ $ grep CONFIG_BPF= /boot/config-`uname -r` CONFIG_BPF=yhowtoing@HowToing ~ $ grep CONFIG_BPF_SYSCALL= /boot/config-`uname -r`CONFIG_BPF_SYSCALL=y howtoing@HowToing ~ $ grep CONFIG_NET_CLS_BPF= /boot/config-`uname -r` CONFIG_NET_CLS_BPF=m howtoing@HowToing ~ $ grep CONFIG_NET_ACT_BPF=/boot/config-`uname -r` CONFIG_NET_ACT_BPF=m howtoing@HowToing ~ $ grep CONFIG_BPF_JIT= /boot/config-`uname -r` CONFIG_BPF_JIT=y howtoing@HowToing ~ $ grep CONFIG_HAVE_BPF_JIT= /boot/config-`uname -r` CONFIG_HAVE_BPF_JIT=y howtoing@HowToing ~$ grep CONFIG_BPF_EVENTS= /boot/config-`uname -r` CONFIG_BPF_EVENTS=y
驗證內核標志后,它的時間在Linux系統中安裝BCC工具。
在Ubuntu 16.04
只有夜間包的Ubuntu 16.04創建,但安裝說明都非常簡單。無需內核升級或從源代碼編譯。
$ echo "deb [trusted=yes] https://repo.iovisor.org/apt/xenial xenial-nightly main" |sudo tee /etc/apt/sources.list.d/iovisor.list $ sudo apt-get update $ sudo apt-getinstall bcc-tools
在Ubuntu 14.04
通過安裝4.3以上版本的 Linux內核,從開始http://kernel.ubuntu.com/~kernel-ppa/mainline 。
作為一個例子,寫一個小的shell腳本“bcc-install.sh”與下面的內容。
注意 :更新PREFIX值的最晚日期,以及瀏覽提供獲得實際的REL值,在shell腳本代替它們的前綴網址的文件。
#!/bin/bash VER=4.5.1-040501 PREFIX=http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5.1-wily/ REL=201604121331 wget ${PREFIX}/linux-headers-${VER}-generic_${VER}.${REL}_amd64.deb wget ${PREFIX}/linux-headers-${VER}_${VER}.${REL}_all.deb wget ${PREFIX}/linux-image-${VER}-generic_${VER}.${REL}_amd64.deb sudo dpkg -i linux-*${VER}.${REL}*.deb
保存文件並退出。使其可執行,然后如圖所示運行:
$ chmod +x bcc-install.sh $ sh bcc-install.sh
然后,重新啟動系統。
$ reboot
接下來,運行以下命令安裝簽名的BCC軟件包:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD $ echo "deb https://repo.iovisor.org/apt trusty main" | sudo tee /etc/apt/sources.list.d/iovisor.list $ sudo apt-get update $ sudo apt-get install binutils bcc bcc-tools libbcc-examples python-bcc
在Fedora 24-23
安裝從4.2+內核http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug ,如果您的系統具有比需要什么更低版本。下面是一個如何做的例子:
$ sudo dnf config-manager --add-repo=http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug/fedora-rawhide-kernel-nodebug.repo $ sudo dnf update $ reboot
在此之后,添加BBC工具庫,更新你的系統,並執行下一個命令系列的安裝工具:
$ echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/nightly/f23/$basearch\nenabled=1\ngpgcheck=0' | sudo tee /etc/yum.repos.d/iovisor.repo $ sudo dnf update $ sudo dnf install bcc-tools
Arch Linux – AUR
您應該將內核升級到至少4.3.1-1版本開始,隨后安裝使用以下任何拱包管理器,如包pacaur,yaourt, 畏縮等。
bcc bcc-tools python-bcc python2-bcc
如何在Linux系統中使用BCC工具
所有BCC工具將被安裝/usr/share/bcc/tools目錄下。 但是,您可以替代地根據BCC Github上庫運行它們/tools在那里他們有結束.py擴展。
$ ls /usr/share/bcc/tools argdist capable filetop offwaketime stackcount vfscount bashreadline cpudist funccount old stacksnoop vfsstat biolatency dcsnoop funclatency oomkill statsnoop wakeuptime biosnoop dcstat gethostlatency opensnoop syncsnoop xfsdist biotop doc hardirqs pidpersec tcpaccept xfsslower bitesize execsnoop killsnoop profile tcpconnect zfsdist btrfsdist ext4dist mdflush runqlat tcpconnlat zfsslower btrfsslower ext4slower memleak softirqs tcpretrans cachestat filelife mysqld_qslower solisten tplist cachetop fileslower offcputime sslsniff trace
我們應包括以下幾個例子-監測的一般Linux系統的性能和網絡。
跟蹤open()系統調用
讓我們通過追蹤所有啟動open()使用opensnoop系統調用。這使我們能夠通過識別他們的數據文件,配置文件等等告訴我們各種應用程序如何工作:
$ cd /usr/share/bcc/tools $ sudo ./opensnoop PID COMM FD ERR PATH 1 systemd 35 0/proc/self/mountinfo 2797 udisksd 13 0 /proc/self/mountinfo 1 systemd 35 0/sys/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda/sda1/uevent 1 systemd 35 0 /run/udev/data/b8:1 1 systemd -1 2 /etc/systemd/system/sys-kernel-debug-tracing.mount 1 systemd -1 2 /run/systemd/system/sys-kernel-debug-tracing.mount 1systemd -1 2 /run/systemd/generator/sys-kernel-debug-tracing.mount 1 systemd -1 2/usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount 2247 systemd 15 0/proc/self/mountinfo 1 systemd -1 2 /lib/systemd/system/sys-kernel-debug-tracing.mount 1systemd -1 2 /usr/lib/systemd/system/sys-kernel-debug-tracing.mount 1

