linux bcc

Linux中出现了一项新技术,可以为系统管理员和开发人员提供大量新工具和仪表板,以进行性能分析和故障排除。 它被称为增强型Berkeley数据包过滤器(eBPF,或简称BPF),尽管这些增强功能不是在Berkeley中开发的,它们不仅对数据包起作用,而且对过滤的作用远不止这些。 我将讨论在Fedora 26上的Fedora和Red Hat系列Linux发行版中使用BPF的一种方法。

BPF可以在内核中运行用户定义的沙盒程序,以立即添加新的自定义功能。 这就像按需为Linux添加超级功能一样。 您可以使用它的示例包括:

  • 先进的性能跟踪工具 :文件系统操作,TCP事件,用户级事件等的编程低开销检测。
  • 网络性能 :提早丢弃数据包以提高DDOS的弹性,或在内核中重定向数据包以提高性能
  • 安全监控 :24x7全天候自定义监控并记录可疑内核和用户空间事件

BPF程序必须通过内核验证程序,以确保它们可以安全运行,并使其在可能的情况下比编写自定义内核模块更安全。 我怀疑大多数人不会自己编写BPF程序,而是会使用其他人的程序。   

7个有用的新bcc / BPF工具

为了了解bcc / BPF工具及其功能,我创建了以下图表并将其添加到bcc项目中:




BCLinux KVM默认密码_python

布伦丹·格雷格(Brendan Gregg), CC BY-SA 4.0



这些是可以通过SSH(安全外壳)使用的命令行界面(CLI)工具。 如今,包括GUI在内的许多分析都是使用GUI和仪表板进行的。 SSH是不得已的方法。 但是,即使您最终打算仅在可用时通过GUI使用它们,这些CLI工具仍然是预览BPF功能的好方法。 我已经开始将BPF功能添加到开源GUI中,但这是另一篇文章的主题。 现在,我想共享CLI工具,您现在可以使用它。

1. execsnoop

从哪儿开始? 如何观看新流程。 这些可以消耗系统资源,但寿命短暂,因此它们不会出现在top(1)或其他工具中。 

# /usr/share/bcc/tools/execsnoop 
     
     

PCOMM            PID    PPID   RET ARGS
     
     

sshd             
     
     12234  
     
     727      
     
     0 
     
     / usr 
     
     / sbin 
     
     / sshd 
     
     -D 
     
     -R 
     
     

unix_chkpwd      
     
     12236  
     
     12234    
     
     0 
     
     / usr 
     
     / sbin 
     
     / unix_chkpwd root nonull
     
     

unix_chkpwd      
     
     12237  
     
     12234    
     
     0 
     
     / usr 
     
     / sbin 
     
     / unix_chkpwd root chkexpiry
     
     
bash             
     
     12239  
     
     12238    
     
     0 
     
     / bin 
     
     / 
     
     bash 
     
     
id               
     
     12241  
     
     12240    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     id 
     
     -un 
     
     
hostname         
     
     12243  
     
     12242    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     hostname 
     
     

pkg-config       
     
     12245  
     
     12244    
     
     0 
     
     / usr 
     
     / bin 
     
     / pkg-config 
     
     --variable =completionsdir bash-completion
     
     

grepconf.sh      
     
     12246  
     
     12239    
     
     0 
     
     / usr 
     
     / libexec 
     
     / grepconf.sh 
     
     -c 
     
     
grep             
     
     12247  
     
     12246    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     grep 
     
     -qsi ^COLOR. 
     
     * none 
     
     / etc 
     
     / GREP_COLORS
     
     

tty              
     
     12249  
     
     12248    
     
     0 
     
     / usr 
     
     / bin 
     
     / tty 
     
     -s 
     
     

tput             
     
     12250  
     
     12248    
     
     0 
     
     / usr 
     
     / bin 
     
     / tput colors
     
     
dircolors        
     
     12252  
     
     12251    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     dircolors 
     
     --sh 
     
     / etc 
     
     / DIR_COLORS
     
     
grep             
     
     12253  
     
     12239    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     grep 
     
     -qi ^COLOR. 
     
     * none 
     
     / etc 
     
     / DIR_COLORS
     
     

grepconf.sh      
     
     12254  
     
     12239    
     
     0 
     
     / usr 
     
     / libexec 
     
     / grepconf.sh 
     
     -c 
     
     
grep             
     
     12255  
     
     12254    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     grep 
     
     -qsi ^COLOR. 
     
     * none 
     
     / etc 
     
     / GREP_COLORS
     
     

grepconf.sh      
     
     12256  
     
     12239    
     
     0 
     
     / usr 
     
     / libexec 
     
     / grepconf.sh 
     
     -c 
     
     
grep             
     
     12257  
     
     12256    
     
     0 
     
     / usr 
     
     / bin 
     
     / 
     
     grep 
     
     -qsi ^COLOR. 
     
     * none 
     
     / etc 
     
     / GREP_COLORS

哇。 那是什么 什么是grepconf.sh ? 什么是/ etc / GREP_COLORS ? grep是否真的通过运行grep来读取自己的配置文件? 那怎么工作?

欢迎使用系统跟踪的乐趣。 您可以学到很多有关系统如何真正工作(或视情况而定不工作)的知识,并在此过程中发现一些简单的优化方法。 execsnoop通过跟踪exec()系统调用来工作,该系统调用通常用于在新进程中加载不同的程序代码。

2. opensnoop

从上面继续,所以grepconf.sh可能是一个shell脚本,对不对? 我将运行file(1)进行检查,并使用opensnoop

# /usr/share/bcc/tools/opensnoop 
     
     

PID    COMM               FD ERR PATH
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / etc 
     
     / ld.so.cache
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / lib64 
     
     / libmagic.so.1
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / lib64 
     
     / libz.so.1
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / lib64 
     
     / libc.so.6
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / usr 
     
     / lib 
     
     / locale 
     
     / locale-archive
     
     
12420  
     
     file               
     
     -1   
     
     2 
     
     / etc 
     
     / magic.mgc
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / etc 
     
     / magic
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / usr 
     
     / share 
     
     / misc 
     
     / magic.mgc
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / usr 
     
     / lib64 
     
     / gconv 
     
     / gconv-modules.cache
     
     
12420  
     
     file                
     
     3   
     
     0 
     
     / usr 
     
     / libexec 
     
     / grepconf.sh
     
     
1      systemd            
     
     16   
     
     0 
     
     / proc 
     
     / 
     
     565 
     
     / cgroup
     
     
1      systemd            
     
     16   
     
     0 
     
     / proc 
     
     / 
     
     536 
     
     / cgroup

execsnoopopensnoop之类的工具在每个事件中打印一行。 这显示文件file(1)正在打开(或尝试打开)的文件:对于/etc/magic.mgc ,返回的文件描述符(“ FD”列)为-1 ,而“ ERR”列则表明它是“文件不存在”。找到了。” 我不知道该文件,也不知道file(1)正在读取的/usr/share/misc/magic.mgc 。 我不应该感到惊讶,但是file(1)可以确定文件类型没有问题:

# file /usr/share/misc/magic.mgc /etc/magic 
     
     
/ usr 
     
     / share 
     
     / misc 
     
     / magic.mgc: magic binary 
     
     file 
     
     for 
     
     file 
     
     ( 
     
     1 
     
     ) cmd 
     
     ( version 
     
     14 
     
     ) 
     
     ( little endian 
     
     ) 
     
     
/ etc 
     
     / magic:                magic text 
     
     file 
     
     for 
     
     file 
     
     ( 
     
     1 
     
     ) cmd, ASCII text

opensnoop通过跟踪open()系统调用来工作。 为什么不只使用strace -feopen文件... ? 在这种情况下,它将起作用。 但是, opensnoop的两个优点是它可以在系统范围内运行,并且可以在所有进程中跟踪open()调用。 请注意,上面包含的输出从systemd打开。 Opensnoop的开销也应该低得多:BPF跟踪已得到优化,并且当前版本的strace(1)仍使用较旧和较慢的ptrace(2)接口。

3. xfsslower

bcc / BPF不仅可以分析系统调用,还可以进行更多分析。 xfsslower工具跟踪延迟大于1毫秒(参数)的常见XFS文件系统操作:

# /usr/share/bcc/tools/xfsslower 1 
     
     

Tracing XFS operations slower than 
     
     1 ms
     
     

TIME     COMM           PID    T BYTES   OFF_KB   LAT 
     
     ( ms 
     
     ) FILENAME
     
     
14 : 
     
     17 : 
     
     34 systemd-journa 
     
     530    S 
     
     0       
     
     0           
     
     1.69 system.journal
     
     
14 : 
     
     17 : 
     
     35 auditd         
     
     651    S 
     
     0       
     
     0           
     
     2.43 audit.log
     
     
14 : 
     
     17 : 
     
     42 cksum          
     
     4167   R 
     
     52976   
     
     0           
     
     1.04 at
     
     
14 : 
     
     17 : 
     
     45 cksum          
     
     4168   R 
     
     53264   
     
     0           
     
     1.62 
     
     [ 
     
     
14 : 
     
     17 : 
     
     45 cksum          
     
     4168   R 
     
     65536   
     
     0           
     
     1.01 certutil
     
     
14 : 
     
     17 : 
     
     45 cksum          
     
     4168   R 
     
     65536   
     
     0           
     
     1.01 
     
     dir 
     
     
14 : 
     
     17 : 
     
     45 cksum          
     
     4168   R 
     
     65536   
     
     0           
     
     1.17 dirmngr-client
     
     
14 : 
     
     17 : 
     
     46 cksum          
     
     4168   R 
     
     65536   
     
     0           
     
     1.06 grub2-file
     
     
14 : 
     
     17 : 
     
     46 cksum          
     
     4168   R 
     
     65536   
     
     128         
     
     1.01 grub2-fstest
     
     
[ ... 
     
     ]

在上面的输出中,我捕获了许多cksum(1)读取(类型==“ R”的“ T”),延迟超过1毫秒。 这是通过在xfsslower工具运行时动态地检测XFS中的内核功能来实现的,并且在结束时撤消该检测。 该bcc工具还具有用于其他文件系统的版本: ext4slowerbtrfsslowerzfsslowernfsslower

这是一个有用的工具,也是BPF跟踪的重要示例。 传统的文件系统性能分析着重于块I / O统计信息,这是您通常在iostat(1)工具上看到并由许多性能监视GUI进行绘制的结果。 这些统计数据显示了磁盘的性能,但实际上不是文件系统。 通常,您比磁盘更关心文件系统的性能,因为它是应用程序向其发出请求并等待的文件系统。 而且文件系统的性能可能与磁盘的性能完全不同! 文件系统可以完全从内存缓存中读取数据,也可以通过预读算法填充该缓存并用于回写缓存。 x fsslower显示文件系统性能-应用程序直接体验的性能。 这通常对于简化整个存储子系统很有用。 如果确实没有文件系统延迟,那么性能问题很可能在其他地方。

4.生物潜伏期

尽管文件系统性能对于研究了解应用程序性能很重要,但是研究磁盘性能也很有价值。 当各种缓存技巧无法掩盖其延迟时,磁盘性能低下将最终影响应用程序。 磁盘性能也是容量规划研究的目标。

iostat(1)工具显示了平均磁盘I / O延迟,但是平均值可能会误导您。 以直方图的形式研究I / O延迟的分布可能很有用,可以使用生物潜伏期来完成:

# /usr/share/bcc/tools/biolatency 
     
     

Tracing block device I 
     
     / O... Hit Ctrl-C to end.
     
     

^C
     
     

     usecs               : count     distribution
     
     

         
     
     0 - 
     
     > 
     
     1          : 
     
     0        
     
     |                                        
     
     | 
     
     

         
     
     2 - 
     
     > 
     
     3          : 
     
     0        
     
     |                                        
     
     | 
     
     

         
     
     4 - 
     
     > 
     
     7          : 
     
     0        
     
     |                                        
     
     | 
     
     

         
     
     8 - 
     
     > 
     
     15         : 
     
     0        
     
     |                                        
     
     | 
     
     

        
     
     16 - 
     
     > 
     
     31         : 
     
     0        
     
     |                                        
     
     | 
     
     

        
     
     32 - 
     
     > 
     
     63         : 
     
     1        
     
     |                                        
     
     | 
     
     

        
     
     64 - 
     
     > 
     
     127        : 
     
     63       
     
     |****                                    
     
     | 
     
     

       
     
     128 - 
     
     > 
     
     255        : 
     
     121      
     
     |*********                               
     
     | 
     
     

       
     
     256 - 
     
     > 
     
     511        : 
     
     483      
     
     |************************************    
     
     | 
     
     

       
     
     512 - 
     
     > 
     
     1023       : 
     
     532      
     
     |****************************************| 
     
     

      
     
     1024 - 
     
     > 
     
     2047       : 
     
     117      
     
     |********                                
     
     | 
     
     

      
     
     2048 - 
     
     > 
     
     4095       : 
     
     8        
     
     |                                        
     
     |

这是另一个有用的工具和另一个有用的示例。 它使用称为地图的BPF功能,可用于实现有效的内核内摘要统计信息。 从内核级别到用户级别的数据传输只是“计数”列; 用户级程序将生成其余部分。

值得注意的是,其中许多工具都支持CLI选项和参数,如USAGE消息所示:

# /usr/share/bcc/tools/biolatency -h 
     
     

usage: biolatency 
     
     [ -h 
     
     ] 
     
     [ -T 
     
     ] 
     
     [ -Q 
     
     ] 
     
     [ -m 
     
     ] 
     
     [ -D 
     
     ] 
     
     [ interval 
     
     ] 
     
     [ count 
     
     ] 
     
     


Summarize block device I 
     
     / O latency 
     
     as a histogram
     
     


positional arguments:
     
     

  interval            output interval, 
     
     in seconds
     
     

  count               number of 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 
     
     1 
     
     10       
     
     # 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

它们的行为类似于其他Unix工具是设计使然,以帮助采用。

5. tcplife

另一个有用的工具和示例,这一次显示TCP会话的寿命和吞吐量统计信息,是tcplife

# /usr/share/bcc/tools/tcplife 
     
     

PID   COMM       LADDR           LPORT RADDR           RPORT TX_KB RX_KB MS
     
     
12759 sshd       192.168.56.101  
     
     22    192.168.56.1    
     
     60639     
     
     2     
     
     3 
     
     1863.82 
     
     
12783 sshd       192.168.56.101  
     
     22    192.168.56.1    
     
     60640     
     
     3     
     
     3 
     
     9174.53 
     
     
12844 
     
     wget       10.0.2.15       
     
     34250 54.204.39.132   
     
     443      
     
     11  
     
     1870 
     
     5712.26 
     
     
12851 curl       10.0.2.15       
     
     34252 54.204.39.132   
     
     443       
     
     0    
     
     74 
     
     505.90

在您说之前:“我不能为此只刮一下tcpdump(8)输出吗?” 请注意,即使多年来对tcpdump(8)的用户级和内核级机制进行了优化,运行tcpdump(8)或任何数据包嗅探器也会在高数据包速率的系统上花费大量开销。更差)。 tcplife不会检测每个数据包; 它仅监视TCP会话状态的更改以提高效率,并以此来计算会话的持续时间。 它还使用内核计数器,该计数器已经跟踪吞吐量以及进程和命令信息(“ PID”和“ COMM”列),而这些信息对于tcpdump(8)等在线嗅探工具不可用。

6. gethostlatency

前面的每个示例都涉及内核跟踪,因此我至少需要一个用户级跟踪示例。 这是gethostlatency ,它使用gethostbyname(3)和相关的库调用来进行名称解析:

# /usr/share/bcc/tools/gethostlatency 
     
     

TIME      PID    COMM                  LATms HOST
     
     

06: 
     
     43 : 
     
     33  
     
     12903  curl                 
     
     188.98 opensource.com
     
     

06: 
     
     43 : 
     
     36  
     
     12905  curl                   
     
     8.45 opensource.com
     
     

06: 
     
     43 : 
     
     40  
     
     12907  curl                   
     
     6.55 opensource.com
     
     

06: 
     
     43 : 
     
     44  
     
     12911  curl                   
     
     9.67 opensource.com
     
     

06: 
     
     45 :02  
     
     12948  curl                  
     
     19.66 opensource.cats
     
     

06: 
     
     45 :06  
     
     12950  curl                  
     
     18.37 opensource.cats
     
     

06: 
     
     45 :07  
     
     12952  curl                  
     
     13.64 opensource.cats
     
     

06: 
     
     45 : 
     
     19  
     
     13139  curl                  
     
     13.10 opensource.cats

是的,它始终是DNS,因此拥有在系统范围内监视DNS请求的工具非常方便(这仅在应用程序使用标准系统库的情况下有效)。 看到我如何跟踪多个查找到“ opensource.com”? 第一次花费了188.98毫秒,然后更快了,不到10毫秒,无疑是被缓存了。 它还跟踪了多个查找到“ opensource.cats”的主机,可悲的是它不存在,但是我们仍然可以检查第一次查找和后续查找的延迟。 (第二次查找后是否有一些负缓存?)

7.追踪

好的,再举一个例子。 跟踪工具由Sasha Goldshtein贡献,并提供了一些具有自定义探针的基本printf(1)功能。 例如:

# /usr/share/bcc/tools/trace 'pam:pam_start "%s: %s", arg1, arg2' 
     
     

PID    TID    COMM         FUNC             -
     
     
13266  
     
     13266  sshd         pam_start        sshd: root

在这里我正在追踪libpam 及其pam_start(3)函数,并将两个参数都打印为字符串。 Libpam用于可插入身份验证模块系统,并且输出显示sshd为“ root”用户(我已登录)调用了pam_start( )。 在USAGE消息中有更多示例(“ trace -h”),此外,所有这些工具在bcc存储库中都有手册页和示例文件; 例如trace_example.txttrace.8

通过软件包安装密件抄送

按照bcc INSTALL.md的指示,从iovisor存储库安装bcc的最佳方法。 IO Visor是包含bcc的Linux Foundation项目。 这些工具使用的BPF增强功能已添加到4.x系列Linux内核(最高4.9)中。 这意味着带有4.8内核的Fedora 25可以运行其中的大多数工具。 Fedora 26(具有4.11内核)可以全部运行(至少当前运行)。

如果您使用的是Fedora 25(或Fedora 26,并且该文章已在多个月前发布,您好吗?从遥远的过去!),那么这种打包方法应该可以用。 如果您使用的是Fedora 26,请跳至“ 通过源代码安装”部分,以避免已知的和已修复的错误。 该错误修复目前尚未进入Fedora 26软件包依赖项。 我正在使用的系统是:

# uname -a 
     
     

Linux localhost.localdomain 4.11.8- 
     
     300 .fc26.x86_64 
     
     #1 SMP Thu Jun 29 20:09:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 
     
     
# cat /etc/fedora-release 
     
     

Fedora release 
     
     26 
     
     ( Twenty Six 
     
     )

这是我遵循的安装步骤,但请参考INSTALL.md以获取更新的版本:

# echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/nightly/f25/$basearch\nenabled=1\ngpgcheck=0' | sudo tee /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中看到新工具:

# ls /usr/share/bcc/tools/ 
     
     

argdist       dcsnoop              killsnoop       softirqs    trace
     
     

bashreadline  dcstat               llcstat         solisten    ttysnoop
     
     
[ ... 
     
     ]

让我们尝试运行其中之一:

# /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" , line 
     
     126 , 
     
     in 
     
     < module 
     
     > 
     
     

    b = BPF 
     
     ( 
     
     text =bpf_text 
     
     ) 
     
     

  File 
     
     "/usr/lib/python3.6/site-packages/bcc/__init__.py" , line 
     
     284 , 
     
     in __init__
     
     

    raise Exception 
     
     ( 
     
     "Failed to compile BPF module %s" 
     
     % src_file 
     
     ) 
     
     

Exception: Failed to compile BPF module

它运行失败,抱怨缺少/lib/modules/4.11.8-300.fc26.x86_64/build 。 如果您也遇到了这个问题,那仅仅是因为系统缺少内核头文件。 如果查看该文件指向的内容(这是一个符号链接),然后使用“ dnf whatprovides”进行搜索,它将告诉您接下来需要安装的软件包。 对于此系统,它是:

# 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
     
     
[ ... 
     
     ]

现在:

# /usr/share/bcc/tools/opensnoop 
     
     

PID    COMM               FD ERR PATH
     
     
11792  
     
     ls                  
     
     3   
     
     0 
     
     / etc 
     
     / ld.so.cache
     
     
11792  
     
     ls                  
     
     3   
     
     0 
     
     / lib64 
     
     / libselinux.so.1
     
     
11792  
     
     ls                  
     
     3   
     
     0 
     
     / lib64 
     
     / libcap.so.2
     
     
11792  
     
     ls                  
     
     3   
     
     0 
     
     / lib64 
     
     / libc.so.6
     
     
[ ... 
     
     ]

有用。 这是另一个窗口中的ls命令捕获的活动。 有关其他有用的命令,请参见前面的部分。

通过源安装

如果需要从源代码安装,还可以在INSTALL.md中找到文档和更新的说明。 我在Fedora 26上做了以下工作:

sudo dnf 
     
     install 
     
     -y 
     
     bison cmake ethtool 
     
     flex 
     
     git iperf libstdc++-static \
     
     

  python-netaddr python-pip 
     
     gcc gcc-c++ 
     
     make zlib-devel \
     
     

  elfutils-libelf-devel
     
     
sudo dnf 
     
     install 
     
     -y luajit luajit-devel  
     
     # for Lua support 
     
     
sudo dnf 
     
     install 
     
     -y \
     
     

  http: 
     
     // pkgs.repoforge.org 
     
     / netperf 
     
     / netperf-2.6.0- 
     
     1 .el6.rf.x86_64.rpm
     
     
sudo pip 
     
     install pyroute2
     
     
sudo dnf 
     
     install 
     
     -y clang clang-devel llvm llvm-devel llvm-static ncurses-devel

除了netperf之外,一切都为我安装了,它有以下错误:

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 ] 
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会在没有它的情况下进行编译。

以下是剩余的密件抄送编译和安装步骤:

git clone https: 
     
     // github.com 
     
     / iovisor 
     
     / bcc.git
     
     
mkdir bcc 
     
     / build; 
     
     cd bcc 
     
     / build
     
     

cmake .. -DCMAKE_INSTALL_PREFIX= 
     
     / usr
     
     
make 
     
     
sudo 
     
     make 
     
     install

此时,命令应该起作用:

# /usr/share/bcc/tools/opensnoop 
     
     

PID    COMM               FD ERR PATH
     
     
4131   
     
     date                
     
     3   
     
     0 
     
     / etc 
     
     / ld.so.cache
     
     
4131   
     
     date                
     
     3   
     
     0 
     
     / lib64 
     
     / libc.so.6
     
     
4131   
     
     date                
     
     3   
     
     0 
     
     / usr 
     
     / lib 
     
     / locale 
     
     / locale-archive
     
     
4131   
     
     date                
     
     3   
     
     0 
     
     / etc 
     
     / localtime
     
     
[ ... 
     
     ]

最后的话和其他前端


BPF的密件抄送前端,并包含Fedora的安装说明。

bcc附带了60多种用于性能分析的新工具,这些工具将帮助您充分利用Linux系统。 也许您将直接通过SSH使用这些工具,或者一旦它们支持BPF,将通过监视GUI使用相同的功能。

而且,密件抄送不是开发中的唯一前端。 有plybpftrace ,旨在提供高级语言来快速编写自定义工具。 此外, SystemTap刚刚发布了3.2版 ,其中包括早期的实验性eBPF后端。 如果继续进行开发,它将为运行多年来开发的许多SystemTap脚本和Tapsets(库)提供安全且高效的生产引擎。 (将SystemTap与eBPF结合使用将是另一篇好文章。)