关于安全:eBPF简介

42次阅读

共计 1403 个字符,预计需要花费 4 分钟才能阅读完成。

根底概念

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 等。场景范畴笼罩容器、平安、网络、跟踪等。

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

eBPF 编译 & 运行过程




eBPF 相干文章 & 书籍 & 视频

官网 https://ebpf.io/

书籍

Linux Observability with BPF

BPF Performance Tools

视频

高效入门 eBPF https://www.bilibili.com/vide…

BPF C 编程入门 https://www.bilibili.com/vide…

  1. Porject

https://github.com/xdp-projec…

eBPF 我的项目

eBPF 在网络方面的利用

1. 数据包过滤

参考高性能 ACL

2. 本地 socket 通信减速

利用 ebpf sockmap/redirection 晋升 socket 性能

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

正文完
 0