zoukankan      html  css  js  c++  java
  • Linux未来监控tracing框架——eBPF

    Linux未来监控tracing框架——eBPF

    eBPF源于早年间的成型于 BSD 之上的传统技术 BPF(Berkeley Packet Filter)。BPF 的全称是 Berkeley Packet Filter,顾名思义,这是一个用于过滤(filter)网络报文(packet)的架构。

    BPF 是在 1997 年首次被引入 Linux 的,Linux 内核中的报文过滤机制其实是有自己的名字的:Linux Socket Filter,简称 LSF。

    从 3.15 开始,一个套源于 BPF 的全新设计开始,在3.17被添置到了 kernel/bpf 下。全新设计最终被命名为了 extended BPF(eBPF);为了后向兼容,传统的 BPF 仍被保留了下来,并被重命名为 classical BPF(cBPF)。相对于 cBPF,eBPF 带来的改变可谓是革命性的:一方面,它已经为内核追踪(Kernel Tracing)、应用性能调优/监控、流控(Traffic Control)等领域带来了激动人心的变革;另一方面,在接口的设计以及易用性上,eBPF 也有了较大的改进。

    cBPF 所覆盖的功能范围很简单,就是网络监控和 seccomp 两块,数据接口设计的粗放;而 eBPF 的利用范围要广的多,性能调优、内核监控、流量控制什么的,数据接口的多样性设计。

    由一个文件(net/core/filter.c)进化到一个目录(kernel/bpf)

    目前,支持生成 BPF 伪代码的编译器只有 llvm 一家,即使是通篇使用 gcc 编译的 Linux 内核,samples 目录下的 bpf 范例也要借用 llvm 来编译完成。

    1. 运行监测

      eBPF 其实是内核模块,比内核模块更短小精干,实现的功能也更新颖, eBPF注入的代码是要在内核中运行的,会有安全隐患。

    为了最大限度控制安全隐患,cBPF 时代就开始加入了代码检查机制以防止不规范的注入代码;到了 eBPF则在载入程序(bpf_load_program())时加入了更复杂的verifier 机制,会进行一系列的安全检查。

    2. 架构

    架构如下:

    3. bcc

    现在可以用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码。这工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BCC),BCC 是一个 python 库,但是其中有很大一部分的实现是基于 C 和 C++的,python实现了对 BCC 应用层接口的封装。

    使用 BCC 进行 BPF 的开发仍然需要开发者自行利用 C 来设计 BPF 程序——但也仅此而已,余下的工作,包括编译、解析 ELF、加载 BPF 代码块以及创建 map 等等基本可以由 BCC 一力承担,无需多劳开发者费心。

    3.1 bcc安装

    github的地址链接如下:

    https://github.com/iovisor/bcc
    
    执行:git clone https://github.com/iovisor/bcc.git
    

    在Ubuntu中直接安装二进制文件,命令如下:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD
    
    echo "deb https://repo.iovisor.org/apt/xenial xenial main" | sudo tee /etc/apt/sources.list.d/iovisor.list
    
    sudo apt-get update
    
    sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r)
    

    这样就可以 使用bcc/example/tracing中的python用例。

  • 相关阅读:
    第二章作业第2题--苏志华
    小学生四则运算应用软件(一)
    YOLO1至YOLOV3方法讲解
    C++ STL中的二分查找
    C++ 中的prioriy_queue 优先级队列 转
    C++ 中的容器(栈、堆、队列) 转
    从尾到头打印链表
    替换空格
    C++中vector<vector<int> >
    对称平方数
  • 原文地址:https://www.cnblogs.com/muahao/p/9448354.html
Copyright © 2011-2022 走看看