在 Linux 中出现的一种新技术能够为系统管理员和开发者提供大量用于性能分析和故障排除的新工具和仪表盘。它被称为 增强的伯克利数据包过滤器 (eBPF,或 BPF),虽然这些改进并不是由伯克利开发的,而且它们不仅仅是处理数据包,更多的是过滤。我将讨论在 Fedora 和 Red Hat Linux 发行版中使用 BPF 的一种方法,并在 Fedora 26 上演示。
BPF 可以在内核中运行由用户定义的沙盒程序,可以立即添加新的自定义功能。这就像按需给 Linux 系统添加超能力一般。 你可以使用它的例子包括如下:
positional arguments: interval output interval, in seconds countnumberof outputs
optional arguments: -h, --help show this help message and exit -T, --timestamp include timestamp on output -Q, --queued include OS queued time in I/O time -m, --milliseconds millisecond histogram -D, --disks print a histogram per disk device
examples: ./biolatency # summarize block I/O latency as a histogram ./biolatency 110# print 1 second summaries, 10 times ./biolatency -mT 1# 1s summaries, milliseconds, and timestamps ./biolatency -Q # include OS queued time in I/O time ./biolatency -D # show each disk device separately
# uname -a Linux localhost.localdomain 4.11.8-300.fc26.x86_64 #1 SMP Thu Jun 2920:09:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux # cat /etc/fedora-release Fedora release 26 (Twenty Six)
以下是我所遵循的安装步骤,但请参阅 INSTALL.md 获取更新的版本:
1 2 3 4 5 6 7
# echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/nightly/f25/$basearch\nenabled=1\ngpgcheck=0' | sudotee /etc/yum.repos.d/iovisor.repo # dnf install bcc-tools [...] Total download size: 37 M Installed size: 143 M Is this ok [y/N]: y
# /usr/share/bcc/tools/opensnoop chdir(/lib/modules/4.11.8-300.fc26.x86_64/build): No such file or directory Traceback (most recent call last): File "/usr/share/bcc/tools/opensnoop", line126, in b = BPF(text=bpf_text) File "/usr/lib/python3.6/site-packages/bcc/__init__.py", line284, in __init__ raiseException("Failed to compile BPF module %s" % src_file) Exception: Failed to compile BPF module
# dnf install kernel-devel-4.11.8-300.fc26.x86_64 [...] Total download size: 20 M Installed size: 63 M Is this ok [y/N]: y [...]
现在:
1 2 3 4 5 6 7 8
# /usr/share/bcc/tools/opensnoop PID COMM FD ERR PATH 11792 ls 30 /etc/ld.so.cache 11792 ls 30 /lib64/libselinux.so.1 11792 ls 30 /lib64/libcap.so.2 11792 ls 30 /lib64/libc.so.6 [...]
Curl error (28): Timeout was reached for http://pkgs.repoforge.org/netperf/netperf-2.6.0-1.el6.rf.x86_64.rpm [Connection timed out after 120002 milliseconds]
不必理会,netperf 是可选的,它只是用于测试,而 bcc 没有它也会编译成功。
以下是余下的 bcc 编译和安装步骤:
1 2 3 4 5 6
git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install
现在,命令应该可以工作了:
1 2 3 4 5 6 7 8
# /usr/share/bcc/tools/opensnoop PID COMM FD ERR PATH 4131 date 30 /etc/ld.so.cache 4131 date 30 /lib64/libc.so.6 4131 date 30 /usr/lib/locale/locale-archive 4131 date 30 /etc/localtime [...]
写在最后和其他的前端
这是一个可以在 Fedora 和 Red Hat 系列操作系统上使用的新 BPF 性能分析强大功能的快速浏览。我演示了 BPF 的流行前端 bcc ,并包括了其在 Fedora 上的安装说明。bcc 附带了 60 多个用于性能分析的新工具,这将帮助您充分利用 Linux 系统。也许你会直接通过 SSH 使用这些工具,或者一旦 GUI 监控程序支持 BPF 的话,你也可以通过它们来使用相同的功能。