eBPF概念详解——认识eBPF

什么是eBPF?
eBPF是一种革命性的技术,起源于Linux内核,可以在操作系统内核中运行沙盒程序。它用于安全高效地扩展内核的功能,而无需更改内核源代码或加载内核模块。
从历史上看,操作系统一直是实现可观察性、安全性和网络功能的理想场所,因为内核具有监督和控制整个系统的特权能力。同时,操作系统内核由于其核心作用和对稳定性和安全性的高要求,很难进化。因此,与在操作系统之外实施的功能相比,操作系统级别的创新速度传统上较低。
eBPF从根本上改变了这个公式。通过允许在操作系统中运行沙盒程序,应用程序开发人员可以运行eBPF程序,以在运行时向操作系统添加其他功能。然后,操作系统保证了安全性和执行效率,就像在即时(JIT)编译器和验证引擎的帮助下本机编译一样。这导致了一波基于eBPF的项目,涵盖了广泛的使用情形,包括下一代网络、可观察性和安全功能。
如今,eBPF被广泛用于推动各种使用情形:在现代数据中心和云原生环境中提供高性能网络和负载平衡,以低开销提取细粒度安全可观察性数据,帮助应用程序开发人员跟踪应用程序,为性能故障排除、
预防性应用程序和容器运行时安全实施等提供见解。可能性是无穷无尽的,eBPF被解锁的创新才刚刚开始。
什么是eBPF.io?
eBPF.io是每个人学习和合作eBPF主题的地方。eBPF是一个开放的社区,每个人都可以参与和分享。无论您是想阅读eBPF的第一篇介绍,查进一步的阅读材料,还是迈出成为主要eBPF项目贡献者的第一步,eBPF.io都将帮助您。
eBPF简介
叶轮加工以下章节是eBPF的快速介绍。如果您想了解有关eBPF的更多信息,请参阅eBPF和XDP参考指南。无论您是希望构建eBPF计划的开发人员,还是对利用使用eBPF的解决方案感兴趣,了解基本概念和体系结构都是有用的。
钩子概述
木制花瓶eBPF程序是事件驱动的,当内核或应用程序通过某个钩点时运行。预定义的钩子包括系统调用、函数进入/退出、内核跟踪点、网络事件和其他几个。
如果预定义的钩子不存在,则可以创建内核探测器(kprobe)或用户探测器(uprobe),以将eBPF程序连接到内核或用户应用程序中的
几乎任何位置。
eBPF程序是如何编写的?
靶板在许多情况下,eBPF不是直接使用的,而是通过以下项目间接使用的茜草,BCC,或bpftrace,它在eBPF之上提供抽象,不需要直接编写程序,而是提供指定基于意图的定义的能力,然后使用eBPF实现这些定义。
如果不存在更高级别的抽象,则需要直接编写程序。Linux内核希望eBPF程序以字节码的形式加载。虽然直接编写字节码当然是可能的,但更常见的开发实践是利用编译器套件,如LLVM将伪C代码编译为eBPF字节码。
加载器和验证体系结构
当确定了所需的钩子时,可以使用bpf系统调用将eBPF程序加载到Linux内核中。这通常是使用一个可用的eBPF库完成的。下一节介绍了可用的开发工具链。
当程序加载到Linux内核时,它在附加到请求的钩子之前要经过两个步骤:apm监控系统
验证
验证步骤确保eBPF程序是安全运行的。它验证程序是否满足几个条件,例如:
道具•加载eBPF程序的进程拥有所需的功能(权限)。除非启用了非
特权eBPF,否则只有特权进程才能加载eBPF程序。
•该程序不会崩溃或以其他方式损害系统。
•程序总是运行到完成(即程序不会永远处于循环中,阻碍进一步的处理)。
医用压片机
JIT编译
即时(JIT)编译步骤将程序的通用字节码转换为机器特定指令集,以优化程序的执行速度。这使得eBPF程序的运行效率与本机编译的内核代码或作为内核模块加载的代码一样高。
地图
eBPF计划的一个重要方面是共享收集的信息和存储状态的能力。为此,eBPF程序可以利用eBPF映射的概念来存储和检索广泛的数据结构集中的数据。eBPF映射可以通过系统调用从eBPF程序以及用户空间中的应用程序访问。

本文发布于:2024-09-22 05:38:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/309923.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:hook api技术
标签:程序   内核   运行   应用程序   加载
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议