eBPF的发展演进---从石器时代到成为神(二)

news/2024/4/20 10:11:59/文章来源:https://blog.csdn.net/weixin_43855876/article/details/130383700

3. 发展溯源

回顾技术的发展过程,就像观看非洲大草原日出日落一样,宏大的过程让人感动,细节部分引人深思。每天循环不辍,却又每天不同。

BPF的应用早已超越了它最初的设计,但如果要追溯BPF最初的来源,则必须回归到它最初的应用领域,再进行理解分析。

BPF最初的用途在于观测,最初用于网络报文的抓取和分析。

因此BPF的最初、最根本的来源,是作为一种观测手段出现的。

而在这个领域中,技术的演进迭代,是一个很长的过程,体现了内核技术发展的艰辛、也同时充满了趣味。

如果把内核看作一个世界,在这个广袤的土地上,观测技术的发展,也同样经历了从蒙昧到现代的发展过程。

每个时代都有其独具特色的观测技术,它决定了当时的开发人员需要具备什么样的功底,什么样的开发方式,这构成了一个时代特色,也谱写了时代的故事。

而每次时代的更迭,总是在某些方面颠覆了或者突破了传统的思维,从而引发了观测方式的巨大进步,促进了效率和可观测性的提升。对现有技术的深入研究与颠覆性的思想所构成的创新,是技术领域演进的基本形式。而其创新的动力又是什么呢?我们在后文逐步揭示。

3.1. 石器时代

曾几何时,内核的开发还在初始阶段,由于内核的原理复杂、所处的位置特殊,开发方式和用户态有很大不同。内核开发难度远远大于用户态的应用开发,尤其调试比较困难。犹记得那时对于内核是否引入GDB调试机制,有过一些争论。其分歧点就在于,引入过于复杂的机制会改变内核的行为特性,影响问题的稳定性,反而不利于问题的分析定位。

那时最值得信赖的工具就是printk了。这是一种低介入的观测工具,使用简单,几乎可以用于任何地方,帮助开发人员观测内核的运行状态。但显著的缺点是不够灵活,如果问题涉及的逻辑路径比较长、分支比较复杂的话,需要反复多次才能定位问题的根源。因此,那时候对内核开发人员的一个必不可少的要求,就是对所负责子系统的实现原理和代码逻辑的熟悉程度需要非常高,能够根据比较少的观测信息,准确定位问题的根源。

事物总是存在两面性,就像当初产生的那场争论一样,printk除了基本的信息输出机制外,几乎没有提供任何强有力的特性,这固然体现了当时的技术水平还在比较原始的阶段(没错,就像是石器时代),但同时也倒逼当时的内核开发人员超强的代码理解和分析能力。以便弥补简陋的工具对效率的掣肘,更快地解决程序中的BUG。

另一方面,客观地讲,printk固然简单,卓尔无往不利。它可以使用在任何地方,具有完全的上下文访问能力,不受约束的表达能力。

它的观测能力和程序本身完全相等,程序本身能看到什么它就能看到什么,可以说是强大到巅峰。这种强大也是其无法被取代的根本原因,尽管内核的调测技术不断在发展,这一点始终未被超越。

它可以用任何线性的文本形式,输出开发人员关注的上下文信息。在后来,这种表达能力得到了进一步发展,支持了部分正则文法。

它的缺点在于缺乏交互性,任何一点改变都需要修改程序。另一方面,不管上层流程是否被关注,它的信息都会被输出,大大影响了性能。

printk可以说是最强大的工具,至今我也是这样认为。但它同时也是最粗糙的工具。就像石头一样,prink随处可见,随处可用,用了就一定有所得。简单、强大、直接。但是同样像石头一样,如果用得多了,就会成为垃圾。

printk相比于BPF,拥有完全不受限制的上下文访问能力,使用的地方几乎没有限制,仅从观测的角度,强大之处有过之而无不及。但是使用方式过于原始,缺乏工业化的扩展能力,因此如果在更长的时间尺度、更广的应用领域来看的话,printk无法和BPF相提并论。

3.2. 铁器时代

在石器时代,人们使用石头磨制的工具进行生产,这些工具粗糙、非标准化、材质原始容易损坏,笨重、使用寿命短。

Printk也是一样,每次执行时都会输出信息,但大多数时候是不需要的;寿命短,每次改变需要修改代码。

随着内核越来越成熟,架构设计、模块划分、内部功能等等都越来越规范合理。内核的特性,由各个子系统分别负责,内核的整体表现是各个子系统行为表现的综合。而子系统内部的关键路径,决定了子系统主要的行为表现,比如:调度系统中的CPU时间统计、上下文切换,迁移等等;内存管理系统中的内存分配、NUMA平衡;虚拟内存中的页面错误、交换次数等等。

随着内核设计的规范化,其内部的关键节点和呈现在外部的语义都越来越清晰和标准化。要掌握内核的运行状态,其实并不需要随处观察,只需要掌握几个关键节点、关键信息就可以了。

以关键变量为基础,工具得以升级;以语义规范化为基础,为交互式的观测机制提供了基础。至此,观测手段不再是单纯的信息输出,它也可以反过来影响系统行为实现多维度的观测。

虚拟文件系统Proc首先打通了用户态和内核态的交互通道,从原来只能控制日志级别,到可以控制数据本身,可以控制的范围更广、更深了;从文本交互,转换为二进制交互,内核性能受到的影响进一步降低。

提供了标准化的API,类型的支持,降低了开发难度,便于推广使用。

提炼出关键参数,通过虚拟文件系统进行交互式的系统观测,反过来有利于内核的规范化。

3.3. 蒸汽时代

Proc的定义很大一部分,还是与具体的上下文相关,并不适合大批量的使用。

Trace定义了协议规范,抽象层次更高,可以批量使用。

Trace是一个更加纯粹的观测机制,给用户提供了通用简单的接口,底层实现了很丰富的机制。可以支持大量使用,对于可观测性的提升起到了根本性的推动。可以批量重复使用,这是它和其他观测方式的区别。

如果说Proc采用了代码数据化的思想,那么Trace采用很多元编程的思想,极大简化了外部接口,减少了重复代码。

3.4. 电气时代

Trace机制固然好用,只要预先铺设了基础设施,运行时就可以随时开启观测。但缺点是,对于没有铺设铁轨的地方,火车的承载能力再强也是无法到达的。

Trace的机制很通用,但另一方面,它无法深入业务层面进行更进一步的调测。要实现这一点,需要完整的上下文能力和可编程能力,因此kprobe出现了。

只要由函数的地方,就像通了电一样,随时可以点亮,这是Kprobe强于Trace的覆盖能力。能够完整访问函数上下文,这是Kprobe强于Trace的业务理解能力。

3.5. 智能时代

Kprobe是动态性的萌芽,但是很多方面不足。它在内核态运行,需要对内核编程有一定了解,编程门槛较高。它有安全性问题,它还有可扩展性问题,等等。

从计算能力来说,所有图灵机的计算能力是相等的,要解决能力问题,最终是要实现一个虚拟机的。而在内核态实现一个虚拟机,所涉及到的安全问题是必须考虑的,通过Verifier和运行时Helper函数,做到了逻辑约束和上下文隔离。虚拟机、Verifier和Helper函数,是BPF和Kprobe的根本区别。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103861.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes为何需要默认的serviceaccount?

文章目录 什么是k8s的serviceAccount?为什么每一个ns下都有默认的sa?default sa yaml 默认的sa下都会挂一个secret,这个secret是从哪里来的?一道关于RBAC的CKA考题1、创建一个新的 ServiceAccount2、创建一个新的 Role3、创建一个…

2023_8.0.33版windows版MySql安装_配置远程连接_修改设置初始密码---MySql工作笔记0001

MySQL :: Download MySQL Community Server https://dev.mysql.com/downloads/mysql/ 首先去下载mysql 可以看到这里下载第一个就可以了,最新版的8.0.33 这里点击仅仅下载 just start my download 然后解压到一个文件夹,然后配置一下环境变量 然后新建一个my.ini文件 然后把…

【GNN】谱域图卷积

谱域图卷积 1. 谱域卷积的背景知识 1.1 谱域图卷积实现思路 f 1 ( t ) ⋆ f 2 ( t ) F − 1 [ F 1 ( w ) F 2 ( w ) ] f_1(t) \star f_2(t) F^{-1}[F_1(w)F_2(w) ] f1​(t)⋆f2​(t)F−1[F1​(w)F2​(w)] 1.2 如何定义图上的傅里叶变换 经典傅里叶变换: x ( …

速卖通正式推出全托管,卖家竞争进入新阶段

全托管来了,卖家就能安心做甩手掌柜吗? 正式推出全托管 显而易见,越来越多的平台正在转向全托管模式。 近日,速卖通在2023年度商家峰会上,正式推出了全托管服务模式。官方表示,托管是对速卖通平台商家服…

golang微服务项目通用流水线

golang微服务项目通用流水线 工作中随着业务越来越大,微服务的项目也越来越多,最开始的时候是一个服务一个流水线,然后还分了三个环境,也就是一个服务三个流水线,后面就越来越不利于管理维护了,因此&#…

持续集成——App自动化测试集成实战

这里写目录标题 一、app自动化测试持续集成的好处二、环境准备三、Jenkins节点挂载四、节点环境的配置1、JDK2、模拟器3、sdk环境4、Python3环境5、allure-commandline工具6、allure插件 五、本地运行待测代码(保证代码没有问题)六、库文件的导出七、Jenkins上运行代码配置1、指…

Visual Studio C# WinForm开发入门(4):概述

目录 一.Winform入门1.WinForm项目结构2.窗口设计与控件布局3.窗口事件4.时间显示器小练习 二.WinForm布局开发1.手动布局解决自适应问题2.WinForm布局属性3.WinForm布局器 三.WinForm常用控件1.界面展示2.实体类 Student(封装信息)3.逻辑事件代码Form.cs 四.图片框与项目资源1…

智慧班牌源码,使用springboot框架Java+vue2开发,二次开发方便快捷

智慧校园云平台电子班牌系统源码 智慧校园平台电子班牌系统源码在大数据平台下,对应用系统进行统一,以数据互联软硬结合的特点应用在校园,实现对校园、班级、教师、学生的管理。 智慧校园云平台电子班牌系统源码,使用springboot…

【视频课程】算法工程师需要的ChatGPT大模型算法理论与实践课程!非粗浅科普...

前言 自从2022年11月ChatGPT发布之后,迅速火遍全球。其对话的交互方式,能够回答问题,承认错误,拒绝不适当的请求,高质量的回答,极度贴近人的思维的交流方式,让大家直呼上瘾,更是带火…

软件开发全套文档案例分享

写在前面 在日常项目开发过程中,会产生大量的过程文档,比如开发过程中的文档、管理过程中的文档、产品相关文档等等,那这些文档我们日常怎么去管理呢?怎么去做规划呢?如何做成通用标准呢?小编特地整理了一…

5款超实用电脑办公软件推荐

1.AIDA64 AIDA64是一款电脑软硬件检测工具,它不仅可以详细的显示出PC的每一个方面的信息,还提供了诸如协助超频,硬件侦错,压力测试和传感器监测等多种功能,以帮助我们对电脑整体性能进行全面评估。 2.傲梅分区助手 …

推荐几个可以免费使用的ChatGPT工具

在ChatGPT相关API推出之后,各种工具如雨后春笋一般层出不穷,这篇文章就列举一些日常使用到的工具。 工具列表 OpenAI 在线读取任意网页内容包括视频(YouTube),并根据这些内容回答你提出的相关问题或总结相关内容支持…

数据划分方法简述:数据离散化和均值标准差分级法(含python代码)

文章目录 1 问题缘起2. 数据离散化等距离散等频离散聚类离散其他 3. 均值标准差分级 1 问题缘起 在数学建模中,我经常遇到这样一个问题: 在某一步中,需要把数据分成好几个类别或者是按照数据大小分级划分。 放到一维数据中形象一点解释就是…

项目管理-团队管理

冲突和竞争 冲突:是指两个或两个以上的社会单元在目标上互不相容或互相排斥,从而产生心理上的或行为上的矛盾。冲突并不一定是有害的, “一团和气”的集体不一定是一个高效率的集体。对于有害的冲突要设法加以解决或减少;对有益的…

Photoshop如何使用基础功能?

文章目录 0.引言1.菜单栏2.工具箱 0.引言 笔者从开始科研时就接触过Photoshop(PS),这么多年一直用着感觉有些陌生,在每次使用PS时总感觉有些抵触,这状态说明还未入门。为了入门PS,笔者从头熟悉PS的菜单和工…

直播软件app开发:如何保证音视频质量?

随着社交媒体的发展,视频直播已成为越来越流行的社交方式。直播软件app开发也因此成为了一个热门话题。在开发直播软件app时,保证音视频质量是至关重要的。本文将介绍如何确保你的直播软件app在音视频质量方面表现出色。 确定音视频质量标准 首先&…

子元素选择器

知识点&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" c…

GoodSync 数据自动同步备份工具VS傲梅轻松备份系统数据备份工具 哪款更好?

备份和同步软件的使用越来越广泛&#xff0c;因为在这个数据驱动的时代&#xff0c;数据的备份和恢复非常重要。在这里我想向大家推荐两款备份和同步软件——GoodSync和傲梅轻松备份。 GoodSync是一款备份和同步软件&#xff0c;它可以在多个设备之间同步文件、文件夹、照片、音…

heic格式转化jpg的3种好用方法

如果你是使用iOS手机的用户&#xff0c;那么一定对HEIC格式不陌生。虽然HEIC格式可以保存原始图像质量&#xff0c;但它只能在苹果手机或Mac电脑上打开。如果我们想要在安卓或Windows系统上打开&#xff0c;就需要使用转换软件将HEIC格式转换成常用的JPG格式。HEIC 是一种新型的…

每日学术速递4.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.AutoNeRF: Training Implicit Scene Representations with Autonomous Agents 标题&#xff1a;AutoNeRF&#xff1a;使用自主代理训练隐式场景表示 作者&#xff1a;Pierre Marz…