首页 > 其他分享 >eBPF,何以称得上是革命性的内核技术?

eBPF,何以称得上是革命性的内核技术?

时间:2023-04-26 22:09:04浏览次数:41  
标签:革命性 eBPF 技术 应用程序 开源 内核 DeepFlow

    eBPF 的全称是 extended Berkeley Packet Filter,它被称之为 “革命性” 的内核技术,可以在 Linux 内核中运行沙盒程序,而无需更改内核源代码或加载内核模块。它提供了一种通用执行引擎,可以基于系统或程序事件高效安全地执行特定代码,就像在实时 (JIT) 编译器和验证引擎的帮助下进行本机编译一样。


   如今,eBPF 被广泛用于各种场景:在现代数据中心和云原生环境中提供高性能网络和负载平衡,以低成本提取细粒度的安全可观测性数据,帮助应用程序开发人员跟踪应用程序,为性能故障排除、预防性应用程序和容器运行时安全实施提供见解等等。一些项目如 Facebook 公司的高性能 4 层负载均衡器 Katran,IO Visor 项目开源的 BCC、 BPFTrace 和 Kubectl-Trace,以及 CloudFlare 公司开源的 eBPF Exporter 和 bpf-tools 都使用了该技术。


   eBPF 为何备受追捧?


   用云杉网络 VP 向阳的话来说:“ eBPF 最重要(没有之一)的特点是安全性” 。他表示,以往必须编写内核模块才能做到的工作现在基本都能做到。但关键性的区别在于,eBPF 代码会经过 Verifier 严格的验证,杜绝了死循环、内存泄露等问题。它会确保内核运行的安全,使得企业愿意在运行关键业务的生产系统中开启此能力,从而释放前所未有的内核可编程性。


   云杉网络 VP 向阳


   eBPF 对可观测性技术的影响更是革命性的,一方面这个场景下 eBPF 的「安全性」体现的更加淋漓尽致,它甚至不会对数据进行任何的修改; 另一方面 eBPF 的「零侵扰」特性使得云原生应用实现全景、全栈的可观测性成为现实。随着云基础设施的迭代和发展、微服务的拆分,业务中的编程语言构成越来越复杂、服务间通信路径涉及到的团队越来越多。与此同时,现有的可观测性方案往往要求打桩插码,为开发者带来了巨大的工作量,因此如何为所有业务支撑团队呈现一个全景、全栈的可观测性视图成为急需解决的一个问题。eBPF 采集的数据能覆盖系统、网络、应用等多个层面,能回答基础设施的性能瓶颈位置,也能回答应用程序中的代码函数热点,在这方面表现出了得天独厚的优势。


   云杉网络开源的云原生可观测性平台 DeepFlow 就充分利用了 eBPF 技术。借助 eBPF 的零侵扰性和安全性优势,开发者无需修改任何一行代码、无需改变任何一个运行参数、甚至无需重启任何一个进程,即可实现全景、全栈的分布式追踪、全景应用拓扑、全栈性能指标能力,覆盖各类语言的应用、各类云原生基础设施,为云原生环境下的可观测性带来了革命性的创新。


   很多人都在关注 eBPF 介入后,应用程序性能会有所损耗。向阳认为,由于 eBPF 程序会 Hook 至内核函数中执行,它带来的性能开销与应用程序本身的资源消耗相关。如果应用本身逻辑非常简单,例如时延不到 1ms,此时 eBPF 介入带来的耗时占比会比较明显。但对于大量的业务 —— 通常会有复杂的计算逻辑、更长的耗时,在生产环境上的经验是大多只会引入 1%~5% 的性能影响。另一方面,DeepFlow 也希望通过自身的开源来推进 eBPF 应用的繁荣,这样也能更加促进 eBPF 技术自身的性能优化。而 DeepFlow 自身的持续测试机制也会在每次代码合入之后进行自动化的性能影响评估,让用户清晰的知道影响到底有多大。


   eBPF 技术还在不断发展,还有什么可能性有待挖掘?2023 年 5 月 28 日, GOTC 2023 eBPF 分论坛将于上海举行,将一览无余地展现 eBPF 技术,并分享如何将其结合到实际工作中。


   与此同时,GOTC 2023 很荣幸邀请到向阳成为该分论坛的联合出品人。早在清华大学攻读计算机系博士学位期间,向阳就实现了世界上第一个全球 BGP 路由劫持实时监测系统,获得了网络测量领域国际顶级会议 IMC 颁发的社区贡献奖,这也是该奖项首次颁发给中国大陆科研人员。毕业后,向阳即加入了云杉网络,如今作为云杉网络的研发 VP,负责 DeepFlow 产品。正是在他的带领下,云杉网络将 eBPF 技术深度应用于 DeepFlow 之中。


   全球开源技术峰会(Global Open-source Technology Conference),简称 GOTC,是由开放原子开源基金会、 Linux 基金会亚太区、上海浦东软件园和开源中国联合发起的,面向全球开发者的一场盛大开源技术盛宴。 5 月 27 日至 28 日,GOTC 2023 将于上海举办为期 2 天的开源行业盛会。大会将以行业展览、主题发言、特别论坛、分论坛的形式展现,与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及开源社区、AIGC、汽车软件、开源商业化、开源教育培训、云原生等热门话题,探讨开源未来,助力开源发展。---------------------------------------------------------------------------------------------------------------------------

每日小知识分享:每一个 HTML 文档中,都有一个不可或缺的标签:<head>,在几乎所有的HTML里, 我们都可以看到类似下面这段代码:

<head><meta charset=utf-8><meta http-equiv=content-type content=text/html; charset=utf-8><meta name=renderer content=webkit/><meta name=force-rendering content=webkit/><meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1/><meta http-equiv=Content-Type content=www.llyz.net imtoken;charset=gb2312><meta name=viewport content=width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no></head>

head标签作为一个容器,主要包含了用于描述 HTML 文档自身信息(元数据)的标签,这些标签一般不会在页面中被显示出来,主要告知搜索引擎本页面的关键字以及对应网址,在SEO中传递相关权重起到非常重要的作用。

标签:革命性,eBPF,技术,应用程序,开源,内核,DeepFlow
From: https://blog.51cto.com/u_16090427/6228977

相关文章

  • 内核源码解读基础
    module_init宏的定义第一段代码:typedefint(*initcall_t)(void);......#define__define_initcall(level,fn,id)\staticinitcall_t__initcall_##fn##id__attribute_used_\__attribute__((__section__(".initcall"level".init")))=fn......#def......
  • 【RT-Thread内核入门指南】P1-10学习笔记
    1、启动线程使用apirt_err_trt_thread_startup(rt_thread_tthread)启动线程启动线程并不是立刻执行线程,而是将其分配到就绪队列2、线程切换状态......
  • UM2080F32 基于 ARM Cortex-M0+内核的超低功 耗、高性能的、单片集成 (G)FSK/OOK 无线
    UM2080F32基于ARMCortex-M0+内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。UM2080F32工作于200MHz~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同时内部集成了完整的射频接收机、射频发射机......
  • linux设备树-linux内核对设备树的处理
    前面几节内容我们介绍了设备树的结构,以及在Mini2440开发板内核中移植设备树。这一节将对linux内核源码进行介绍,分析内核对设备的处理逻辑。 参考文章[1]linux设备树学习笔记(二、linux内核对设备树的处理)......
  • linux 内核等待队列
    一背景和意义在实际编程中,我们会经常碰到这种场景:进程P需要等待条件C的成立,才能继续执行某个动作。例如,当串口没有数据可以读取时,我们可以通过轮询的方式,等到有数据来的时候,串口程序再去读取。但是这种方式显得比较笨拙,影响CPU的性能。因此,内核中提供了等待队列的方式,即可以将进......
  • kconfig-hardened-check linux 内核安全选项检查工具
    kconfig-hardened-check是一个内核安全配置选项的检查工具,可以快速的帮助我们发现内核的一些安全配置项对于安全有比较高要求的还是值得使用的参考使用安装 python3-mvenvvenvsourcevenv/bin/activatepipinstall-Upippipinstallgit+https:......
  • Android升级WebView浏览器内核版本
    使用AOSP项目编译的Android系统,会发现在部分APP使用系统自带的浏览器内核来加载网页时会出现报错,加载不出网页的情况,其实这是由于WebView自带的浏览器内核版本太旧所导致的,只要更新成比较新的浏览器内核版本就行了。一、环境准备(1)Android系统源码编译环境(Android9.0)二、下载新......
  • 常用内核架构
     本文分享自天翼云开发者社区《常用内核架构》,作者:JackW 宏内核应用程序调用内存分配的API(应用程序接口)函数。处理器切换到特权模式,开始运行内核代码。内核里的内存管理代码按照特定的算法,分配一块内存。把分配的内存块的首地址,返回给内存分配的API函数。内存分配的......
  • Linux切换内核版本
    Linux切换内核版本有些软件会对Linux内核的版本有要求。为此我们需要安装并切换到指定的内核版本。本文以5.4.0-26-generic为例。参考:LayerStackTutorials-LayerStack-HowtochangethedefaultBootKernelonLinuxCloudServers下载指定版本sudoapt-getinstall......
  • K8s为啥要启用bridge-nf-call-iptables内核参数?用案例给你讲明白
    使用kubernetes遇到最多的70%问题都可以归于网络问题,最近发现如果内核参数:bridge-nf-call-iptables设置不当的话会影响kubernetes中Node节点上的Pod通过ClusterIP去访问同Node上的其它pod时会有超时现象,复盘记录一下排查的前因后因。1、问题现象集群环境为K8sv......