zoukankan      html  css  js  c++  java
  • eBPF简介

    基础概念

    eBPF是kernel 3.15中引入的全新设计,将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。

    eBPF支持在用户态将C语言编写的一小段“内核代码”注入到内核中运行,注入时要先用llvm编译得到使用BPF指令集的elf文件,然后从elf文件中解析出可以注入内核的部分,最后用bpf_load_program方法完成注入。 用户态程序和注入到内核中的程序通过共用一个位于内核中map实现通信。为了防止注入的代码导致内核崩溃,eBPF会对注入的代码进行严格检查,拒绝不合格的代码的注入。

    1. DPDK让用户态程序直接处理网络流,bypass掉内核,使用独立的CPU专门干这个事。

    2. XDP让灌入网卡的eBPF程序直接处理网络流,bypass掉内核,使用网卡NPU专门干这个事。

    3. EBPF是XDP实现的基础,提供一种类似于在应用层编写驱动的能力,允许用户编写一个沙盒程序动态注入到内核中,运行在内核的虚拟机中。我们利用ebpf绕过内核协议栈进行加速。

    eBPF 发展历程

    1992年:BPF全称Berkeley Packet Filter,诞生初衷提供一种内核中自定义报文过滤的手段(类汇编),提升抓包效率。(tcpdump)

    2011年:linux kernel 3.2版本对BPF进行重大改进,引入BPF JIT,使其性能得到大幅提升。

    2014年: linux kernel 3.15版本,BPF扩展成eBPF,其功能范畴扩展至:内核跟踪、性能调优、协议栈QoS等方面。与之配套改进包括:扩展BPF ISA指令集、提供高级语言(C)编程手段、提供MAP机制、提供Help机制、引入Verifier机制等。

    2016年: linux kernel 4.8版本,eBPF支持XDP,进一步拓展该技术在网络领域的应用。随后Netronome公司提出eBPF硬件卸载方案。

    2018年:linux kernel 4.18版本,引入BTF,将内核中BPF对象(Prog/Map)由字节码转换成统一结构对象,这有利于eBPF对象与Kernel版本的配套管理,为eBPF的发展奠定基础。

    2018年: 从kernel 4.20版本开始,eBPF成为内核最活跃的项目之一,新增特性包括:sysctrl hook、flow dissector、struct_ops、lsm hook、ring buffer等。场景范围覆盖容器、安全、网络、跟踪等。

    2020年: 随着btf的引入 CORE的实现大大提高了ebpf的部署难度,简化开发难度。参考自BPF Portability and CO-RE
    file

    eBPF编译&运行过程

    file
    file
    file
    file

    eBPF相关文章&书籍&视频

    官网 https://ebpf.io/

    书籍

    Linux Observability with BPF

    BPF Performance Tools

    视频

    高效入门eBPF https://www.bilibili.com/video/BV1LX4y157Gp/

    BPF C编程入门 https://www.bilibili.com/video/BV1f54y1h74r/

    1. Porject

    https://github.com/xdp-project/xdp-tutorial

    eBPF项目

    file

    eBPF在网络方面的应用

    1. 数据包过滤

    参考高性能ACL

    2. 本地socket通信加速

    利用ebpf sockmap/redirection提升socket性能

    本文由博客一文多发平台 OpenWrite 发布!

  • 相关阅读:
    链表逆序输出 ---九度1511
    java 通过ssh连接linux服务器的测试代码
    C/C++时间函数总结
    C,C++,windows api, linux api 操作文件总结
    基于大数据计算思想的分布式数据库
    手机定位的方式
    矩阵取数问题
    回文字符串
    linux shell重定向总结
    apache flink 入门
  • 原文地址:https://www.cnblogs.com/senberhu/p/15730481.html
Copyright © 2011-2022 走看看