浅析eBPF

目录

一、eBPF 原理

二、eBPF 已可投入使用的场景

三、eBPF 与 Jaeger/Zipkin 的区别及先进性

四、使用 eBPF 的开源软件

五、开源软件的局限性或待实现功能

猫哥说


一、eBPF 原理

eBPF (extended Berkeley Packet Filter) 是一种内核技术,允许用户在内核空间安全、高效地运行自定义程序,而无需修改内核代码或加载内核模块。

核心概念:

  1. BPF 虚拟机:内核中的一个轻量级虚拟机,负责执行 eBPF 程序。
  2. eBPF 程序:用户编写的、经过编译的字节码程序,可以在内核事件(如系统调用、网络事件、内核探针)发生时被触发执行。
  3. Maps:eBPF 程序与用户空间程序之间共享数据的机制,类似于键值对存储。
  4. Helper Functions:内核提供的一组函数,eBPF 程序可以通过这些函数访问内核功能和数据。
  5. Verifier:内核中的一个安全验证器,确保 eBPF 程序不会导致内核崩溃或安全漏洞。
  6. JIT Compiler:将 eBPF 字节码编译为本地机器码,提高执行效率。

工作流程:

  1. 用户编写 eBPF 程序(通常使用 C 语言)。
  2. 使用 LLVM/Clang 编译器将 eBPF 程序编译为 BPF 字节码。
  3. 通过 bpf() 系统调用将字节码加载到内核。
  4. Verifier 验证程序的安全性。
  5. JIT Compiler 将字节码编译为本地机器码(可选)。
  6. 将 eBPF 程序附加到内核事件(如 kprobes、tracepoints、网络接口等)。
  7. 当事件发生时,eBPF 程序被触发执行。
  8. eBPF 程序可以通过 Maps 与用户空间程序交换数据。

eBPF 的优势:

  • 安全:Verifier 确保 eBPF 程序不会破坏内核稳定性。
  • 高效:JIT 编译和内核态执行带来高性能。
  • 灵活:可以动态加载和卸载,无需重启内核或应用。
  • 可编程:用户可以自定义 eBPF 程序,实现各种功能。

二、eBPF 已可投入使用的场景

eBPF 在可观测性领域有广泛的应用:

  1. 网络性能监控

    • 监控网络流量、延迟、丢包率等。
    • 分析网络协议、识别性能瓶颈。
    • 实现自定义的网络策略。
  2. 系统调用跟踪

    • 跟踪应用的系统调用,分析系统调用频率、耗时等。
    • 识别系统调用相关的性能问题。
  3. 内核探针(kprobes/uprobes)

    • 在内核函数或用户空间函数入口/出口处插入探针,收集函数参数、返回值、执行时间等信息。
    • 用于性能分析、故障排查。
  4. 跟踪点(tracepoints)

    • 利用内核中预定义的跟踪点,收集内核事件信息。
    • 用于性能分析、故障排查。
  5. 安全监控

    • 监控系统调用、网络事件等,检测异常行为。
    • 实现入侵检测、安全审计等功能。
  6. 容器监控

    • 监控容器的网络流量、资源使用情况等。
    • 实现容器隔离和安全策略。
  7. 应用性能监控(APM)

    • 通过 uprobes 跟踪用户空间函数,收集应用性能数据。
    • 与传统的 APM 相比,eBPF 具有更低的开销和更高的灵活性。

三、eBPF 与 Jaeger/Zipkin 的区别及先进性

区别:

  • Jaeger/Zipkin:是分布式追踪系统,主要关注服务间的调用关系和延迟,通过在应用中埋点(instrumentation)来收集数据。
  • eBPF:是一种内核技术,可以在内核空间收集各种数据,包括网络、系统调用、内核事件等,也可以用于应用性能监控,但其应用范围更广。

先进性:

  1. 低开销:eBPF 在内核态执行,无需频繁的用户态/内核态切换,开销更低。
  2. 无需埋点:eBPF 可以通过 kprobes/uprobes 动态地收集数据,无需修改应用代码。
  3. 更全面的数据:eBPF 可以收集更底层的数据,如内核事件、系统调用等,而 Jaeger/Zipkin 主要关注服务间的调用。
  4. 安全性:eBPF 的 Verifier 机制确保了程序的安全性,不会影响内核稳定性。
  5. 动态性:eBPF 程序可以动态加载和卸载,无需重启应用或内核。

总结:eBPF 是一种更底层、更通用、更安全的技术,可以用于实现更广泛的可观测性场景,包括 Jaeger/Zipkin 所关注的分布式追踪。

四、使用 eBPF 的开源软件

  1. BCC (BPF Compiler Collection)

    • 官网:GitHub - iovisor/bcc: BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more
    • 解决的难题:提供了一组工具和库,简化 eBPF 程序的开发和部署。
    • 局限性:需要一定的 C 和 Python 编程基础。
  2. bpftrace

    • 官网:GitHub - bpftrace/bpftrace: High-level tracing language for Linux
    • 解决的难题:提供了一种高级的、声明式的语言,用于编写 eBPF 程序,简化了 eBPF 的使用。
    • 局限性:表达能力不如 BCC 强大,不适合复杂的 eBPF 程序。
  3. Cilium

    • 官网:Cilium - Cloud Native, eBPF-based Networking, Observability, and Security
    • 解决的难题:基于 eBPF 实现 Kubernetes 的网络、安全和可观测性。
    • 局限性:主要面向 Kubernetes 环境。
  4. Falco

    • 官网:Falco
    • 解决的难题:基于 eBPF 实现容器安全监控和威胁检测。
    • 局限性:主要面向容器安全。
  5. Katran

    • 官网:GitHub - facebookincubator/katran: A high performance layer 4 load balancer
    • 解决的难题:基于 eBPF 实现高性能的 L4 负载均衡器。
    • 局限性:主要面向网络负载均衡。
  6. Pixie

    • 官网:Kubernetes Monitoring, Application Debug Platform | Pixie
    • 解决的难题:基于 eBPF 实现 Kubernetes 应用的自动监控和调试。
    • 局限性:主要面向 Kubernetes 环境。
  7. Parca

    • 官网:Parca - Open Source infrastructure-wide continuous profiling
    • 解决的难题:基于 eBPF 实现持续性能分析(Continuous Profiling)。
    • 局限性:主要面向性能分析。

五、开源软件的局限性或待实现功能

  1. eBPF 学习曲线陡峭:eBPF 技术本身有一定的学习门槛,需要掌握内核、C 语言、BPF 虚拟机等知识。
  2. eBPF 程序开发调试困难:eBPF 程序的开发和调试不如用户态程序方便。
  3. eBPF 安全性挑战:虽然 Verifier 机制可以防止大部分安全问题,但仍需谨慎编写 eBPF 程序,避免潜在的安全漏洞。
  4. eBPF 与应用集成的挑战:将 eBPF 收集的数据与应用层面的指标、日志、调用链关联起来,需要一定的集成工作。
  5. eBPF 标准化:eBPF 相关的工具和库仍在快速发展中,缺乏统一的标准。

待实现功能:

  1. 更友好的 eBPF 开发工具:提供更高级的语言、更强大的调试工具、更完善的文档,降低 eBPF 的使用门槛。
  2. 更丰富的 eBPF 程序库:提供更多预定义的 eBPF 程序,覆盖更多的可观测性场景。
  3. eBPF 与 OpenTelemetry 的集成:将 eBPF 收集的数据与 OpenTelemetry 标准集成,实现更全面的可观测性。
  4. eBPF 在安全领域的应用:进一步探索 eBPF 在安全领域的应用,如入侵检测、漏洞利用检测等。
  5. eBPF 在边缘计算的应用:将 eBPF 应用于边缘计算场景,实现边缘设备的监控和管理。

猫哥说

eBPF 是一项强大的内核技术,在可观测性领域具有广阔的应用前景。虽然 eBPF 仍存在一些挑战,但随着技术的不断发展和社区的不断壮大,eBPF 将在可观测性领域发挥越来越重要的作用。

其实eBPF本身没有那么难,但是如果总是让工程师人员复用,以做简单项目为主,以酒量作为考察标准,搞不出来eBPF,让单子飞了,是再正常不过的事情!

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

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

相关文章

DIALOGPT:大规模生成式预训练用于对话响应生成

摘要 我们提出了一个大规模、可调节的神经对话响应生成模型,DIALOGPT(对话生成预训练变换器)。该模型训练于从2005年至2017年间Reddit评论链中提取的1.47亿次类似对话的交流,DIALOGPT扩展了Hugging Face的PyTorch变换器&#xff…

Mac端不显示正常用户名,变成192的解决方法

今天打开终端,本应该显示机器名的,但是此时显示了192。 问题原因: 当路由器的DNS使用默认的 192.168.1.1 或 192.168.0.1 的时候 Terminal 里的计算机名 会变成 localhost。当路由器的DNS使用自定义的 例如 运营商的DNS 或者 公共DNS的时候 …

SD 卡无屏安装启动树莓派5

最近想用一下树莓派5,拿出来一看,是 Micro-HMDI 的接口,手头正好没有这个接口线,便研究如何在没有显示屏的情况下,安装启动树莓派。 一、使用 Raspberry Pi Imager 烧录 SD 卡 选择 Raspberry Pi Imager 来烧录 SD 卡…

Xlua 编译 Windows、UWP、Android、iOS 平台支持库

Xlua 编译 Windows、UWP、Android、iOS 平台支持库 Windows: 安装 Visual Studio(推荐 2017 或更高版本) 安装 CMake(https://cmake.org/) macOS: 安装 Xcode 和命令行工具 安装 CMake 检查 cmake 是否安…

npm : 无法加载文件 E:\ProgramFiles\Nodejs\npm.ps1,因为在此系统上禁止运行脚本。

这个错误是因为 Windows 系统的 PowerShell 执行策略 限制了脚本的运行。默认情况下,PowerShell 的执行策略是 Restricted,即禁止运行任何脚本。以下是解决该问题的步骤: 1. 检查当前执行策略 打开 PowerShell(管理员权限&#x…

基于专利合作地址匹配的数据构建区域协同矩阵

文章目录 地区地址提取完成的处理代码 在专利合作申请表中,有多家公司合作申请。在专利权人地址中, 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。 下图是专利合作表的一部分…

若依vue plus环境搭建

继前面文章若依系统环境搭建记录-CSDN博客 把ruoyi vue plus也摸索了下。 作者是疯狂的狮子,dromara/RuoYi-Vue-Plus 初始化文档:项目初始化,环境搭建的视频:RuoYi-Vue-Plus 5.0 搭建与运行_哔哩哔哩_bilibili 上来就列出了一…

在ubuntu如何安装samba软件?

我们在开发过程中,经常修改代码,可以安装samba文件来实现,把ubuntu的存储空间指定为我们win上的一个磁盘,然后我们在或者磁盘里面创建.c文件,进行代码修改和编写。samba能将linux的文件目录直接映射到windows&#xff…

论文阅读笔记:Deep Face Recognition: A Survey

论文阅读笔记:Deep Face Recognition: A Survey 1 介绍2 总览2.1 人脸识别组件2.1.1 人脸处理2.1.2 深度特征提取2.1.3 基于深度特征的人脸对比 3 网络结构和损失函数3.1 判别损失函数的演化3.1.1 基于欧式距离的损失3.1.2 基于角度/余弦边距的损失3.1.3 Softmax损失…

使用 Polars 进行人工智能医疗数据分析(ICU数据基本测试篇)

引言 在医疗领域,数据就是生命的密码,每一个数据点都可能蕴含着拯救生命的关键信息。特别是在 ICU 这样的重症监护场景中,医生需要实时、准确地了解患者的病情变化,以便做出及时有效的治疗决策。而随着医疗技术的飞速发展&#x…

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量(可选)解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下,Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密: 1…

Anaconda安装 超详细版 (2025版)

目录 第一步:下载anaconda安装包 官网下载:Anaconda | Built to Advance Open Source AI 清华大学镜像站下载(速度较快) 第二步:安装anaconda 第三步:验证安装 扩展 创建conda基本环境 激活conda环…

想知道两轮差速方形底盘 URDF 咋做,ROS2 配 Rviz 咋显示吗?看这里!

视频讲解 想知道两轮差速方形底盘 URDF 咋做&#xff0c;ROS2 配 Rviz 咋显示吗&#xff1f;看这里&#xff01; 模型概述 一个方形底盘和两个差速驱动轮 URDF 代码 <?xml version"1.0" encoding"utf-8"?> <robot name"diff"> …

轻量化网络设计|ShuffleNet:深度学习中的轻量化革命

一、引言 在深度学习中&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;无疑是大家最耳熟能详的算法之一。自诞生以来&#xff0c;CNN 在图像分类、目标检测、语义分割等众多计算机视觉任务中取得了令人瞩目的成就&#xff0c;…

最好Wordpree+Apache+PHP安装教程

前提需要 PHP的安装最少需要7.4以上Mysql的安装&#xff0c;直接默认最新版就行APache服务器&#xff08;HTTP服务器&#xff0c;只有用这个你的软件才能在服务器上运行&#xff09; 安装apache 安装 sudo apt install apache2查看防火墙 sudo ufw app list如果有 Apache那…

Linux实操——在服务器上直接从百度网盘下载(/上传)文件

Linux Linux实操——在服务器上直接从百度网盘下载&#xff08;/上传&#xff09;文件 文章目录 Linux前言一、下载并安装bypy工具二、认证并授权网盘账号三、将所需文件转移至目的文件夹下四、下载文件五、上传文件六、更换绑定的百度云盘账户 前言 最近收到一批很大的数据&…

一周一个Unity小游戏2D反弹球游戏 - 移动的弹板(触屏版)

前言 上文中实现了用鼠标移动控制弹板的移动&#xff0c;本文将实现手指触屏时弹板跟随手指移动的功能&#xff0c;并通过使用Unity自带的Device Simulator Devices Package来验证和模拟触屏设备的使用场景。 安装Device Simulator Devices Package 打开Unity Package Manager&…

DeepSeek 开源狂欢周(一)FlashMLA:高效推理加速新时代

上周末&#xff0c;DeepSeek在X平台&#xff08;Twitter&#xff09;宣布将开启连续一周的开源&#xff0c;整个开源社区为之沸腾&#xff0c;全球AI爱好者纷纷为关注。没错&#xff0c;这是一场由DeepSeek引领的开源盛宴&#xff0c;推翻了传统推理加速的种种限制。这周一&…

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机多特征分类预测

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机多特征分类预测 目录 分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机…

【Java项目】基于Spring Boot的校园闲置物品交易网站

【Java项目】基于Spring Boot的校园闲置物品交易网站 技术简介&#xff1a;采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介&#xff1a;校园闲置物品交易网站是一个典型的管理系统&#xff0c;主要功能包括管理员&#xff1a;首页、个人中心、用户管理、商品类…