bpf简介1

article/2025/9/19 22:46:33

文章目录

    • 前言
    • preface
    • Introduction
      • 历史发展
      • 结构
    • 推荐阅读

前言

来源:Linux Observability with BPF

这里整理下该书第一章:preface && Introduction

这本书有中文版的《Linux内核观测技术BPF》。这个链接里面的资料也是很好的,可以参考。

在开始看书之前,我们不妨先刷下相关视频,有个大概了解:高效入门eBPF – Linux内核之旅 – bilibili | BPF C编程入门 – Linux内核之旅 – bilibili | Linux 核心設計 透過 eBPF 觀察作業系統行為 – 黃敬群老师 – 成功资大

我之前整理数据包嗅探原理介绍的时候,简单查过bpf,当时没看懂。冤家路窄,今天又遇到了,哈哈哈。

看完上面三个链接视频,书上第一章Introduction快速翻下就好。这里简单整理下,下面只有干巴巴的文字,无任何图片。

当然也可以参考这:bpf_intro


preface

这本书的目的是帮助您熟悉在使用该Linux子系统的日常工作中需要的基本BPF概念。 BPF仍是一种发展中的技术,在我们编写本书时,新的概念和范例也在不断发展。 理想情况下,这本书将为您提供BPF基础组件的坚实基础,从而帮助您轻松地扩展知识。[这本书可能更多的是应用;原理介绍可能较少;所以可能难度上也简单些,不放刷快些。]

阅读了许多这些资源后,我们意识到每次需要学习有关BPF的知识时,我们都需要在许多博客文章,手册页以及Internet上的其他地方之间切换。 这本书是我们试图将分散在网络上的知识集中放置在中心位置,以供下一代BPF发烧友学习这一奇妙技术的方法。

这本书可以帮助您完成工作。 通常,如果本书提供了示例代码,则可以在程序和文档中使用它。 除非您复制了很大一部分代码,否则无需与我们联系以获取许可。 例如,编写使用本书中若干代码段的程序无需许可。 出售或分发O’Reilly书籍中的示例确实需要获得许可。 引用本书并引用示例代码来回答问题无需许可。 将本书中的大量示例代码合并到您的产品文档中确实需要获得许可。如果您认为对代码示例的使用超出了合理使用范围或此处给出的许可范围,请随时通过permissions@oreilly.com与我们联系。


Introduction

日志可以提供程序行为方式的精确数据。但是,日志只能提供,该程序构造者暴露出来的信息。通过日志推出程序执行流程具有挑战性。而黑天鹅事件,在软件工程中常常发生。可观察性可以帮助我们构建强壮的系统。

打开文件是一种事件,由CPU执行任意指令是一个事件,接收网络数据包是一个事件。BPF允许您编写在内核触发任何事件时可以安全执行的程序。 BPF为您提供了强有力的安全保证,以防止您在这些程序中注入系统崩溃和恶意行为。 BPF一系列程序工具,可以帮助系统开发人员观察和使用这些新平台。

历史发展

1992年,Steven McCanne和Van Jacobson撰写了论文The BSD Packet Filter:A New Architecture for User-Level Packet Capture。 在论文中,作者描述了他们如何为Unix内核实现网络数据包过滤器,该速度比当时的数据包过滤技术快20倍。 数据包过滤器有一个特定的目的:提供一个应用程序,该程序使用内核中的直接信息来监视系统网络的。 利用这些信息,应用程序可以决定如何处理这些数据包。 BPF在数据包过滤方面引入了两项重大创新:

  • 一种新的虚拟机(VM),旨在与基于寄存器的CPU有效地协同工作。
  • 每个应用程序缓冲区的使用可以过滤数据包而不复制所有数据包信息。 这样可以最大程度地减少决策所需的数据BPF。

2014年初,Alexei Starovoitov引入了扩展的BPF实施。 这项新设计针对现代硬件进行了优化,使其生成的指令集比旧的BPF解释器生成的机器代码更快。 此扩展版本还将BPF VM中的寄存器数量从2个32位寄存器增加到10个64位寄存器。 寄存器数量及其宽度的增加为编写更复杂的程序提供了可能,因为开发人员可以使用函数参数自由地交换更多的信息。 这些更改以及其他改进使扩展的BPF版本的速度比原始BPF实施快了四倍。

2014年6月,BPF的扩展版本暴露于用户空间。 这是BPF未来的拐点。正如Alexei在介绍这些更改的补丁中所写的那样,此补丁集展示了eBPF的潜力。

BPF成为顶级内核子系统,并且不再局限于网络堆栈。 BPF程序开始看起来更像内核模块,重点是安全性和稳定性。 与内核模块不同,BPF程序不需要您重新编译内核,并且可以确保它们完成而不会崩溃。

我们将在下一章中讨论的BPF验证器添加了这些必需的安全保证。 这样可以确保所有BPF程序都能正常运行而不会崩溃,并且可以确保程序不会尝试访问超出范围的内存。 但是,这些优点带有一定的限制:程序具有最大允许的大小,并且需要对循环进行限制,以确保不良BPF程序不会耗尽系统的内存。

通过更改使BPF可从用户空间访问,内核开发人员还添加了一个新的系统调用(syscall),bpf。 这个新的系统调用将成为用户空间和内核之间的核心通信。后面会介绍,syscall与BPF程序和maps一起使用。BPF maps将成为在内核和用户空间之间交换数据的主要机制。

结构

BPF内核中的体系结构令人着迷。 在整本书中,我们将深入探讨其具体细节,但在本章中,我们希望为您提供有关其工作原理的快速概述。

如前所述,BPF是一种高级虚拟机,在隔离的环境中运行代码指令。 从某种意义上讲,您可以像对Java虚拟机(Java Virtual Machine,JVM)那样思考BPF。Java虚拟机是run从高级编程语言编译而来的机器代码的专用程序。 编译代码后,BPF使用验证程序来确保该程序可以安全地由内核运行。 它可以防止您运行可能会使内核崩溃而危及系统的代码。 如果您的代码安全,则BPF程序将被加载到内核中。 Linux内核还为BPF指令集成了即时(JIT)编译器。 程序经过验证后,JIT将直接将BPF字节码转换为机器码,从而避免了执行时间的开销。

在内核运行任何BPF程序之前,它需要知道该程序附加到哪个执行点。 内核中有多个连接点,并且列表在不断增加。 执行点由BPF程序类型定义; 我们将在下一章中讨论它们。 选择执行点时,内核还会提供特定的函数帮助器,可用于处理程序接收的数据,从而使执行点和BPF程序紧密耦合。

BPF体系结构的最后一个组件负责在内核和用户空间之间共享数据。 该组件称为BPF maps,我们将在第3章中讨论映射。BPF映射是共享数据的双向结构。 这意味着您可以从内核和用户空间这两个方面进行写入和读取。 有几种类型的结构,从简单的数组和哈希图到专用的图,可以将整个BPF程序保存在其中。

推荐阅读

EBPF文章翻译(1)—EBPF介绍
下面这张图片,也来自该链接。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/0HNiZpjA.shtml

相关文章

BPF技术学习分享

什么是BPF程序: BPF is a highly flexible and efficient virtual machine-like construct in the Linux kernel allowing to execute bytecode at various hook points in a safe manner. BPF程序 ----LLVMClang----> BPF字节码 ----JIT----> BPF指令集&…

BPF之事件源

基础 1. BPF和eBPF概念 BPF 原是 Berkeley Packet Filter(伯克利数据包过滤器)的缩写,1992诞生,用于网络包过滤。2014经过修改并入 Linux 内核主线,从此 BPF 变成了一个更通用的执行引擎,主要用于网络、可…

DPDK BPF

DPDK BPF DPDK 自版本 18.05 已集成了 librte_bpf, 主要利用rte_eth_rx_burst/rte_eth_tx_burst 回调函数机制, 执行eBPF字节码. 当前支持以下特性: base eBPF ISA (except tail-pointer)JIT (x86_64 and arm64 only)eBPF code verifieruser-defined helper functions (64-bi…

Linux超能力BPF技术介绍及学习分享

近两年BPF技术跃然成为了一项热门技术,在刚刚结束的KubeCon 2020 Europe会议上有7个关于BPF的技术分享, 而在KubeCon 2020 China会议上也已有了3个关于BPF技术的中文分享,分别来自腾讯和PingCAP,涉足网络优化和系统追踪等领域。在…

bpf原理与入门

一、bpf架构 如上图所示,bpf由六部分构成,以下为其在bpf中的作用: bpf工具:该部分涉及bpf用户态程序、bpf的编译工具,通过bpf编译工具如Clang、LLVM将bpf用户态程序编译成bpf字节码; 加载器:可以简单理解为bpf系统调用,将bpf字节码加载到内核; 验证器:对bpf程序的…

BPF入门1:BPF技术简介

目录 cbpf 介绍ebpf 介绍ebpf 和 cbpf对比ebpf和内核模块的对比 ebpf应用ebpf架构Why BPF is FAST指令虚拟机JIT How BPF extends KernelLLVM 编写ebpf程序BCCBPFTraceC 语言原生方式 国内大厂使用ebpf的实践经验参考 cbpf 介绍 BPF(Berkeley Packet Filter &#…

增广拉格朗日函数

对于优化问题 arg ⁡ min ⁡ z E ( z ) ( 1 a ) s . t . C z − b 0 ( 1 b ) \mathop{\arg\min}_{z} \ E(z)\qquad(1a)\\ s.t. \quad Cz-b0 \qquad(1b) argminz​ E(z)(1a)s.t.Cz−b0(1b) 其增广拉格朗日函数被定义为: L ( z , α , μ ) E ( z ) α T ( C z −…

约束优化:PHR-ALM 增广拉格朗日函数法

文章目录 约束优化:PHR-ALM 增广拉格朗日函数法等式约束非凸优化问题的PHR-ALM不等式约束非凸优化问题的PHR-ALM对于一般非凸优化问题的PHR-ALM参考文献 约束优化:PHR-ALM 增广拉格朗日函数法 基础预备: 约束优化:约束优化的三种…

matlab编写拉格朗日插值代码函数

要求:根据拉格朗日多项式插值法原理,设计算法流程并且编写拉格朗日插值代码函数。 代码如下: function[y]lagrange(x0,y0,x) %建立一个函数名为lagrange的函数,输入x0,y0为插值点的坐标,均为数组,x为要…

拉格朗日函数最优化问题

目的:将有约束条件的函数最优化问题通过拉格朗日函数转化为无条件的函数最优化问题。 条件极值最优化问题: 对于无条件的函数最优化问题,常用的有3种方式: 梯度下降:求解一阶导数,其实就是使用泰勒一阶展…

【深度学习】拉格朗日( Lagrange)中值定理

文章目录 1、定理2、几何意义3、证明思路4、有限增量定理5、推论1、定理 如果函数 f(x) 满足: 在闭区间[a,b]上连续; 在开区间(a,b)内可导。 那么在(a,b)内至少有一点ξ(a<ξ<b),使等式 : f(b)-f(a)=f′(ξ)(b-a) 成立,或: f′(ξ) =(f(b)-f(a)) / (b-a) 或存…

拉格朗日(lagrange)插值及其MATLAB程序

一、n次拉格朗日插值 根据《插值多项式的性质》中的定理6.1可得 其中&#xff08;6.19&#xff09;称为基函数&#xff0c;&#xff08;6.18&#xff09;称为拉格朗日多项式&#xff0c;用&#xff08;6.18&#xff09;计算插值称为拉格朗日多项式插值。 方法2&#xff1a;通过…

拉格朗日函数优化

等式约束最优化 可以写为&#xff1a; 引入拉格朗日乘子&#xff08;&#xff09;把问题转换成拉格朗日函数 因为对于任何可行解&#xff0c;有&#xff0c;所以有 &#xff0c;也就是&#xff0c;。 求解。对分别求的偏导数为零&#xff0c;得到方程组求解极值点&#xff0c…

增广拉格朗日函数法

增广拉格朗日函数法 在二次罚函数法中&#xff0c;为了保证可行性&#xff0c;罚因子必须趋于正无穷。此时&#xff0c;子问题因条件数爆炸而难以求解。那么&#xff0c;是否可以通过对二次罚函数进行某种修正&#xff0c;使得对有限的罚因子&#xff0c;得到的毕竟最优解也是…

增广拉格朗日函数法(ALM)

增广拉格朗日函数法&#xff08; Augmented Lagrangian method&#xff09; 一、等式约束 考虑问题&#xff1a; min ⁡ x f ( x ) s . t . c i ( x ) 0 , i 1 , ⋯ , m . \begin{array}{ll} \min_x &f(x)\\ s.t. &c_i(x) 0, \quad i1,\cdots,m. \end{array} min…

广义拉格朗日函数的理解

1、拉格朗日函数&#xff1a; 求极值 求函数f(x,y,z)在条件φ(x,y,z)0下的极值 方法&#xff08;步骤&#xff09;是&#xff1a; 1.做拉格朗日函数Lf(x,y,z)λφ(x,y,z),λ称拉格朗日乘数 2.求L分别对x,y,z,λ求偏导,得方程组,求出驻点P(x,y,z) 如果这个实际问题的最大或…

各种拉格朗日函数

目录 一&#xff0c;拉格朗日函数 二&#xff0c;部分拉格朗日函数 三&#xff0c;增广拉格朗日函数 一&#xff0c;拉格朗日函数 以三元函数为例&#xff1a; 求f(x,y,z)的极值&#xff0c;s.t.g(x,y,z)0 拉格朗日函数L(x,y,z,a) f(x,y,z) a * g(x,y,z) 在极值点处一…

拉格朗日函数相关推导

优化问题&#xff08;即高数中的求极值&#xff09;可分为三类&#xff1a;无约束、等式约束、不等式约束。 对于无约束的优化问题&#xff1a;求导&#xff0c;令导数为零即可求解。 等式约束优化&#xff1a;&#xff08;拉格朗日乘子法最开始就是求解等式约束优化的方法&…

HJ-浇花

链接&#xff1a;https://ac.nowcoder.com/acm/contest/322/M 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 HJ养了很多花&#xff08;9999999…

单片机——自动浇花系统

目录 1、图片 2、代码 1、图片 2、代码 #include <reg51.h> //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535#include <intrins.h>sbi…