eBPF 学习路径总结「建议收藏」

eBPF 学习路径总结「建议收藏」BPF学习路径总结•Feiskyhttps://feisky.xyz/posts/2021-01-06-ebpf-learn-path/目录1.为什么要学习BPF2.BPF应该怎么学习2.1BPF书籍2.2BPF学习样例3.BPF资料汇总3.1介绍系列3.2深入系列3.3Linux资源作者简介:狄卫华,趣头条资深架构师,主要关注云原生相关领域,目前聚焦在BPF技术及实践.1.为什么要学习BPF可以先从ebpf.i.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

BPF 学习路径总结 • Feiskyicon-default.png?t=L892https://feisky.xyz/posts/2021-01-06-ebpf-learn-path/

目录

1. 为什么要学习 BPF

2. BPF 应该怎么学习

2.1 BPF 书籍

2.2 BPF 学习样例

3. BPF 资料汇总

3.1 介绍系列

3.2 深入系列

3.3 Linux 资源


作者简介:狄卫华,趣头条资深架构师,主要关注云原生相关领域,目前聚焦在 BPF 技术及实践.

1. 为什么要学习 BPF

可以先从 ebpf.io 网站获取一个简单的了解,首页内容翻译如下。

Linux 内核一直是实现监控/可观察性、网络和安全性的理想场所。不幸的是,这往往是不切实际的,因为它需要改变内核源代码或加载内核模块,并导致层层抽象叠加。eBPF 是一项革命性的技术,它可以在 Linux 内核中运行沙盒程序,而无需改变内核源代码或加载内核模块。

通过使Linux内核可编程,基础架构软件可以利用现有的层,使其更加智能,功能更加丰富,而不会继续给系统增加额外的复杂度,也不会影响执行效率和安全性。

eBPF 开发了全新一代的软件,能够对 Linux 内核的行为进行重新编程,甚至在传统上完全独立的多个子系统中应用逻辑。

eBPF 学习路径总结「建议收藏」

 

BPF 技术目前主要用于以下场景:

  1. 追踪和性能分析(Tracing & Profiling)

    将 eBPF 程序附加到跟踪点以及内核和用户应用探针点的能力,使得应用程序和系统本身的运行时行为具有前所未有的可见性。通过赋予应用程序和系统两方面的检测能力,可以将两种视图结合起来,从而获得强大而独特的洞察力来排除系统性能问题。先进的统计数据结构允许以高效的方式提取有意义的可见性数据,而不需要像类似系统那样,通常需要导出大量的采样数据。

  2. 观测和监控(Obervability & Monitoring)

    eBPF 不依赖于操作系统暴露的静态计数器和测量,而是实现了自定义指标的收集和内核内聚合,并基于广泛的可能来源生成可见性事件。这扩展了实现的可见性深度,并通过只收集所需的可见性数据,以及在事件源处生成直方图和类似的数据结构,而不是依赖样本的导出,大大降低了整体系统的开销。

  3. 网络(Network)

    可编程性和效率的结合使得 eBPF 自然而然地满足了网络解决方案的所有数据包处理要求。eBPF 的可编程性使其能够在不离开 Linux内核的包处理上下文的情况下,添加额外的协议解析器,并轻松编程任何转发逻辑以满足不断变化的需求。JIT 编译器提供的效率使其执行性能接近于本地编译的内核代码。

  4. 安全(Security)

    在看到和理解所有系统调用的基础上,将其与所有网络操作的数据包和套接字级视图相结合,可以采用革命性的新方法来确保系统的安全。虽然系统调用过滤、网络级过滤和进程上下文跟踪等方面通常由完全独立的系统处理,但 eBPF 允许将所有方面的可视性和控制结合起来,以创建在更多上下文上运行的、具有更好控制水平的安全系统。

在追踪方面细分为了两类:

  • 追踪和性能分析
  • 观测和监控

这两者的区别主要在于数据的搜集和聚合是否在内测层面进行的,观测和监控主要是侧重于在内核导出指标、直方图或相关事件。

eBPF 学习路径总结「建议收藏」

 BPF 技术的整体介绍请参见 eBPF 技术简介icon-default.png?t=L892https://www.ebpf.top/post/bpf_intro_blog/

2. BPF 应该怎么学习

2.1 BPF 书籍

2.1.1 书籍介绍

如果是想系统学习 BPF 技术,我的建议是先阅读相关的书籍,得到一个整体的认识,然后分方向单独深入。

目前 BPF 的书籍主要有以下两本:

2.1.2 图书心得

  • 《Linux Observability with BPF》

    中文和英文版都在 180 页左右,整体的思路清晰,相关的技术面面俱到,如果定位是整体理解(而不是实践练习),整本书阅读一天内可以完成,能够实现快速对于 BPF 技术的整体了解,但是本书对于涉及的内容介绍基本上还是停留在基础知识介绍,基本上无深入知识介绍,作为入门级别的书籍再合适不过。主要内容包括以下方面:

    • BPF 基础知识
      • BPF 的历史及架构;
      • BPF 的程序类型和验证器:按照重要性依次介绍了各种程序类型;
      • BPF Map: BPF Map 类型,常见操作和以及 Map 相关虚拟系统;
    • BPF Trace
      • BPF Trace:Trace 的基础知识(kprobe、tracepoint、usdt等)和几个 BCC 使用的样例;
      • BPF 相关工具(BPFTool & BPFTrace & kubectl-trace & eBPF Exportor);
    • BPF Network
      • Linux 网络和 BPF:涵盖数据包过滤和 cls_bpf 相关内容;
      • XDP:由于 XDP 在网络数据处理的特殊地位,单独成章,对于 XDP 进行了简单介绍和一个简单的原理实现,以及如何使用 BCC 进行 XDP 相关的验证;
    • 安全
      • 主要是 Seccomp(基于传统的 cBPF)和 LSM 钩子两个方面的内容,主要是简单的介绍,内容不多;
    • 真实的用户案例
      • 国外几大公司 Sysdig 、Floowmill 等在 BPF 的技术实践。
  • 《BPF Performance Tools》

    本书英文版 839 页,主要涉及的 BPF 技术的基础、BPF Trace 基础基础知识、BPF 技术 Trace 方面的各种实践本书无 BPF 在网络、安全上的详细介绍。本书的介绍侧重于基础知识和在 Trace 层面的实践,可以理解为 《Systems Performance: Enterprise and the Cloud》图书的修订版本,重点引入了 BPF 技术的实践。

    全书主题分成四个部分:

    1. 技术

      在第一部分主要涉及的是 BPF 相关的技术和如何使用的总览。

      • BPF 技术介绍
      • ? 技术背景
      • 性能分析总览
      • BCC 工具介绍
      • BPFTrace 工具介绍

      这个部分的内容介绍,重点在 技术背景 章节,介绍的了 Trace 相关的技术点及实现原理,总结的非常简练和准确,值得多阅读几遍; BCC 和 BPFTrace 工具的介绍更多是从原理和使用层面介绍,详细的知识可以从两者的 github 网址学习到,贵在章节内容总结的有图有条理,可以快速对于整体架构有个快速的认知。

    2. 使用 BPF 工具

      本章节主要是介绍了各种性能分析维度(CPU/Mem/Network/System等)的背景知识、传统工具和BPF 工具使用。

      这个章节可以理解是 《Systems Performance: Enterprise and the Cloud》的缩减(背景知识、传统工具)和BPF 工具的补充,但是也增加了一些多的内容比如安全、容器和虚拟化的内容。

      这部分的内容有方法论、基础知识和使用实践,可以作为日常问题排查的参考工具书。

    3. 附加主题

      作为 BPF 性能工具的补充,还有一些是使用 BPF 各种过程中的小知识、技巧和常见的问题。

    4. 附录

      虽然是作为附录的内容,但是却是我们学习深入技术点的重要参考,主要是 bpftrace 工具的一览表、BCC Tools 开发、使用原生的 C 编写 BPF 和 BPF 指令集等。

      这部分的内容面对的是希望对于 BPF 技术更加深入了解和希望参与到 BCC 工具开发的研发人员。

2.2 BPF 学习样例

如果是 BCC 的样例可以参考 tools 目录下的全部文件; BPFTrace 也可以参考 tools 目录。

内核中的 BPF 样例参见 samples/bpf 和 testing/bpf,这部分的代码都是原生的 C 代码,比较适合对于 BPF 技术原理进一步深入的同学。

如果是一开始学习 BPF,我个人的建议是:

  1. 先大体了解 BPF 技术的发展历史、优点、限制;
  2. 使用 BCC 工具在环境中进行实践,并且初步了解相关工具的的运作机制;
  3. 参考 BCC 样例,用原生的 C 代码进行实践并编写;
  4. 通过 KubeCon 会议或者 BPF Summit 峰会学习当前主要的进展并学习跟进最新的进展;

学习方式也可以参考的大卫李的一篇文章 Linux超能力BPF技术介绍及学习分享,写的内容也比较齐全,可以参考。

3. BPF 资料汇总

如果有好的文章或者思路分析,可以到我的 GitHub Repo 提交 Issue,地址:https://github.com/DavadDi/bpf_study。

3.1 介绍系列

3.2 深入系列

3.3 Linux 资源

本文转自深入浅出 eBPF,点击这里查看原文。


欢迎扫描下面的二维码关注漫谈云原生公众号,回复任意关键字查询更多云原生知识库,或回复联系加我微信。

BPF 学习路径总结 • FeiskyeBPF 学习路径总结「建议收藏」https://feisky.xyz/posts/2021-01-06-ebpf-learn-path/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191028.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java删除文件内容_java 删除文件中的数据[通俗易懂]

    java删除文件内容_java 删除文件中的数据[通俗易懂]展开全部32313133353236313431303231363533e78988e69d83313333373962311、如果只是想要文件中的内容,可以使用如下代码:FileOutputStreamfs=newFileOutputStream(newFile(“C:\\buyterms.txt”));2、如果是想要文件夹中的内容,可以使用如下代码:packagecom.xx;im…

  • 漏洞挖掘丨敏感信息泄露+IDOR+密码确认绕过=账户劫持

    漏洞挖掘丨敏感信息泄露+IDOR+密码确认绕过=账户劫持获得账户auth_token目标网站是一个工作招聘门户网站,测试保密原因暂且称其为redacted.com。一开始,我登录以应聘者身份去测试CSRF或某些存储型XSS,但没什么发现。接下来,我就想到了越权测试(IDOR),为此,我又创建了另外一个账号,两个账号一起可以测试如注册、登录、忘记密码等功能点的越权可能。创建账号前我开启了流量抓包想看看具体服务端的响应,注册开始时,网站会跳出一个提示,…

  • jenkins allure_Jenkins

    jenkins allure_Jenkins前言jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了。allure安装在运行代码的服务器本机,我这里是用的dock

  • TinyXML2 入门教程

    TinyXML2 入门教程TinyXML2是simple、small、efficient开源的C++XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。TinyXML2详细介绍与源码获取方法详见:TinyXML2官网。

  • 解决项目中java heap space的问题[通俗易懂]

    解决项目中java heap space的问题[通俗易懂]起因 17年的一个项目出了OOM(javaheapspace)问题,眼下有个问题:法院项目,不能外网,一连接外网高院会直接定位到计算机,发出警报(档案的机密性啊)不能远程,那只能视频教他们怎么做了,全程和一个文员说代码,真的很累==! 过程 这个过程对一个不太了解内存的问题的开发无疑是艰难的,搜了一下,知道了是内存溢出导致的,于是着手解决 网上大多数都说调整运行…

  • Windows命令之ftp命令「建议收藏」

    Windows命令之ftp命令「建议收藏」FTP(FileTransferProtocol,文件传输协议)是TCP/IP协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。windows终端默认安装ftp客户端,我们可以通过ftp命令执行文件的上传和下载。博文环境如下

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号