送书《BPF之巅:洞悉Linux系统和应用性能》

7d6b6ce9a72993c02ac448bb22997a05.png

了解更多BPF技术内幕,推荐阅读《BPF之巅:洞悉Linux系统和应用性能》一书。

BPF是近年来Linux 系统技术领域一个巨大的创新。作为 Linux 内核的一个关键发展节点,其重要程度不亚于虚拟化、容器、SDN 等技术。

▼BPF 的工作方式十分有趣 :

最终用户使用 BPF 虚拟机的指令集(也称 BPF 字节码)定义过滤器表达式,然后传递给内核,由解释器执行。这使得包过滤可以在内核中直接进行,避免了向用户态进程复制每个数据包,从而提升了数据包过滤的性能,tcpdump(8) 就是这样工作的。 

BPF 还提供了安全性保障,因为用户定义的过滤器在执行前必须首先通过安全性验证。

早期的包过滤必须在内核空间执行,安全是一个硬性要求。大家可以从下图了解这一切是如何工作的。

4d6fbcfb0efe28ec282fb78f2af631cb.png

tcpdump 和 BPF

在运行 tcpdump(8) 时带上命令行参数 -d,可以打印出使用过滤器表达式的 BPF 指令。例如 :

9e1d7aa565ce9f0739e374846edf8e33.png

▊ 经典 BPF 与扩展版 BPF

最初的 BPF 现在被称为“经典 BPF”,它是一个功能有限的虚拟机。它有两个寄存器,一个由 16 个内存槽位组成的临时存储区域和一个程序计数器。以上部件均按 32 位寄存器大小运行。经典 BPF 于 1997 年进入 Linux 内核版本 2.1.75。

而后Alexei Starovoitov 创造了扩展版 BPF(eBPF)。这是 20 年来 BPF 的第一次重大更新,此举也将 BPF 扩展为一个通用的虚拟机。

虽然BPF通常被称为虚拟机,不过这往往指的是它的实现规范。BPF在Linux中的实际实现(运行时支持)同时包括一个解释器和一个可即时编译为本机指令的编译器。

“虚拟机”一词似乎意味着在处理器之上运行另一个机器层,而实际BPF执行并非如此。JIT编译后的代码会像任何其他本地内核代码一样,直接在处理器上运行。要注意,在Spectre漏洞公布之后,一些发行版默认在x86架构上启用JIT,完全移除了内核中的解释器实现(通过条件编译直接排除了相关代码)。

扩展版的 BPF 中增加了更多寄存器,并将字长从 32 位增至 64 位,创建了灵活的BPF 映射型存储(map),并允许调用一些受限制的内核功能。同时,eBPF 被设计为可以使用即时编译(JIT),机器指令与寄存器可以一对一映射。这就使得先前的处理器本地指令优化技术,可以重用于 BPF 之上。BPF 验证器也进行了更新以便支持这些扩展,而且能够拒绝任何不安全的代码。

经典 BPF 和扩展版 BPF 之间的差异如下。

5f5f294e0036456183f791a7977a27e0.png

在最早的代码补丁中,扩展版BPF曾被简写为 eBPF,不过如今有关的开发讨论中,都直接使用BPF 这种叫法。

Linux BPF 运行时(runtime)的各模块的架构如下图。

3b9e1a667d6eefe337024d0f5559c2a3.png

BPF 运行时的内部结构

上图展示了 BPF 指令如何通过 BPF 验证器验证,再由 BPF 虚拟机执行。

BPF 虚拟机的实现既包括一个解释器,又包括一个 JIT 编译器 :JIT 编译器负责生成处理器可直接执行的机器指令。验证器会拒绝那些不安全的操作,这包括针对无界循环的检查 :BPF 程序必须在有限的时间内完成。

BPF 可以利用辅助函数获取内核状态,利用 BPF 映射表进行存储。BPF 程序在特定事件发生时执行,包括 kprobes、uprobes 和跟踪点等事件。

接下来我们来讨论一下,为什么性能工具需要 BPF 技术。

▊ 为什么性能工具需要 BPF 技术

性能工具使用扩展版 BPF 来实现可编程性。BPF 程序可以执行自定义的延迟计算和统计摘要等功能。这些特性本身就足够使 BPF 成为一个有趣的工具。

不过事实上有很多跟踪工具都具备了这些功能。BPF 与众不同之处在于,它还同时具备高效率和生产环境安全性的特点,并且它已经被内置在 Linux 内核中。

有了 BPF,你就可以在生产环境中直接运行这些工具,而无须增加新的内核组件。

下面我们通过一个工具的输出和一幅图来看一下性能工具是如何使用 BPF 的。

这个 例子的输出来自性能优化大师Gregg以前发布的一个叫作 bitehist 的 BPF 工具,它用直方图的形式展示磁盘 I/O 的尺寸分布:

04ef8f291b56d8f0e83e936716676531.png

下图显示了使用 BPF 之前和之后的直方图生成过程。

0f4333ddf6b2f97a9902812db5ef610e.png

使用 BPF 之前和之后生成直方图过程的对比

这里的关键变化是,直方图可以在内核上下文中生成,这大大减少了需要复制到用户空间的数据量。这里的效率提升是如此的显著,以至于工具的额外开销减小到可以在生产环境下直接运行的程度。

使用 BPF 之前,制作这一直方图摘要的最佳步骤如下。

1.在内核中 :开启磁盘 I/O 事件的插桩观测。

2.在内核中,针对每个事件 :向 perf 缓冲区写入一条记录。如果使用了跟踪点技术(推荐方式),记录中会包含关于磁盘 I/O 的几个元数据字段。

3. 在用户空间 :周期性地将所有事件的缓冲区内容复制到用户空间。

4. 在用户空间 :遍历每个事件,解析字节字段的事件元数据字段。其他字段会被忽略。

5. 在用户空间 :生成字节字段的直方图摘要

其中步骤 2 到步骤 4 对于高 I/O 的系统来说性能开销非常大。可以想象一下,将 10000个磁盘 I/O 跟踪记录复制到用户空间程序中,然后解析以生成摘要信息—每秒执行 1 次。

使用 BPF 之后,bitesize 程序执行的步骤如下。

1. 在内核中:启用磁盘 I/O 事件的插桩观测,并挂载一个由 bitesize 工具定义的BPF 程序。

2. 在内核中,对每次事件 :运行 BPF 程序。它只获取字节字段,并将其保存到自定义的 BPF 直方图映射数据结构中。

3.在用户空间 :一次性读取 BPF 直方图映射表并输出结果。

这个过程避免了将事件复制到用户空间并再次对其处理的成本,也避免了对未使用的元数据字段的复制。如前面的程序输出截图所示,唯一需要复制到用户空间的数据是“count”列,其是一个数字数组。

▊ BPF 与内核模块的对比

还有一种方法可以理解 BPF 在可观测性方面的优势 :将其与内核模块进行比较

kprobes 和跟踪点已经出现多年了,可以直接从可加载的内核模块中使用。与使用内核模块相比,使用 BPF 进行跟踪的优势如下 :

● BPF 程序会通过验证器的安全性检查 ;内核模块则可能会引入 bug(内核崩溃)或安全漏洞。

● BPF 通过映射提供丰富的数据结构支持。

● BPF 程序可以一次编译,然后在任何地方运行,因为 BPF 指令集、映射表结构、辅助函数和相关基础设施属于稳定的 ABI。(当然,有些 BPF 程序包含了不稳定的因素,比如使用了 kprobes 来观测内核数据结构,这会影响 BPF 程序的自身稳定性)

● BPF 程序的编译不依赖内核编译过程的中间结果。

● 与开发内核模块所需的工程量相比,BPF 编程更加易学,可以让更多人上手。

请注意,在网络领域应用 BPF 还有额外的好处,包括原子性替换 BPF 程序的能力。如果使用内核模块,则需要先从内核中将其完全卸载,然后再次加载,这可能会导致相关服务中断。

使用内核模块的一个好处是 :在模块中可以使用其他内核函数和内核设施,而不仅限于 BPF 提供的辅助函数。

不过,如果调用任意内核函数的能力被滥用,也会带来引入bug 的额外风险。


了解更多BPF技术内幕,推荐阅读《BPF之巅:洞悉Linux系统和应用性能》一书。

c0d17395b1a7f2b44a2ac02b6571868f.png

▊《BPF之巅:洞悉Linux系统和应用性能》

【美】Brendan Gregg 著

孙宇聪 吕宏利 刘晓舟 译

  • Gregg大师新作,《性能之巅》再续新篇

  • 性能优化的万用金典,150+分析调试工具深度剖析

本书作为全面介绍 BPF 技术的图书,从 BPF 技术的起源到未来发展方向都有涵盖,不仅全面介绍了 BPF 的编程模型,还完整介绍了两个主要的 BPF 前端编程框架 — BCC 和 bpftrace,更给出了一系列实现范例,生动展示了 BPF技术的实际能力和未来发展前景。

687ec18d75ac0a7e4617ab3b6add2d3d.png

(扫码了解本书详情)

京东双11 活动 每满100减50,建议凑单会非常划算!

 
 
这本经典好书,我已经收入囊中,想要这本书的朋友欢迎大家点赞,在看,分享至朋友圈。我这边免费送三本给大家,送给留言积赞前三的有心人,欢迎大家三连支持,你们的支持才能持续送上经典好书,多谢了!





5T技术资源大放送!包括但不限于:C/C++,Arm, Linux,Android,人工智能,单片机,树莓派,等等。在上面的【人人都是极客】公众号内回复「peter」,即可免费获取!!

 记得点击分享、赞和在看,给我充点儿电吧
布道师Peter
关注 关注
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
洞悉linux系统应用性能,BPF之巅洞悉Linux系统应用性
weixin_35714577的博客
05-14 1298
第1章 引 言11.1 BPF和eBPF是什么 11.2 跟踪、嗅探、采样、剖析和可观测性分别是什么 21.3 BCC、bpftrace和IO Visor 31.4 初识BCC:快速上手 41.5 BPF跟踪的能见度 71.6 动态插桩:kprobes和uprobes 81.7 静态插桩:tracepoint和USDT 91.8 初识bpftrace:跟踪open() 101.9 再回...
性能之巅洞悉系统、企业与云计算.docx
最新发布
09-13
性能之巅洞悉系统、企业与云计算 本文概述随着科技的不断进步,系统、企业和云计算的规模和复杂性日益增加。在这种背景下,性能优化成为了科技领域的关键问题之一。无论是系统、企业还是云计算,性能问题都可能对...
Linux操作系统性能调优_了解系统.pdf
10-20
Linux操作系统性能调优_了解系统.pdf
ebpf.zip -- linux 性能巅峰之作
05-17
BPF (eBPF) tracing is a superpower that can analyze everything, and I'll show you how in my upcoming book BPF Performance Tools: Linux System and Application Observability, coming soon from Addison Wesley. The book includes over 150 BPF observability tools that you can run to find performance wins and troubleshoot software, and also shows you how to write your own.
BPF 之巅洞悉 Linux 系统应用性
博文视点(北京)官方博客
05-01 3174
以下内容节选自《BPF之巅洞悉Linux系统应用性能》一书! --正文-- BPF是近年来Linux 系统技术领域一个巨大的创新。作为 Linux 内核的一个关键发展节点,其重要程度不亚于虚拟化、容器、SDN 等技术。 ▊ BPF 和 eBPF 是什么 BPF 是 Berkeley Packet Filter(伯克利数据包过滤器)的缩写,这项冷门技术诞生于 1992 年,其作用是提升网络包过滤工具的性能。2013 年,Alexei Starovoitov 向 Linux 社...
BPF之巅--洞悉Linux系统应用性能 Brendan Gregg
qq_31220203的博客
07-12 3624
目录标题软件安装第一章 引言第二章 扩展版BPF第三章 性能分析第四章 BCC第五章 bpftrace第六章 CPU第七章 内存第八章 文件系统第九章 磁盘I/O第十章 网络第十一章 安全第十二章 编程语言第十三章 应用程序第十四章 内核 软件安装 项目地址 https://github.com/iovisor/bpftrace https://github.com/iovisor/bcc 配套资源 https://github.com/brendangregg/bpf-perf-tools-book
BPF-Performance-Tools-by-Brendan-Gregg.pdf
01-13
综上所述,BPF及其相关工具为Linux系统和应用程序的性能分析提供了非常丰富和强大的手段,使得开发者能够更高效地进行性能调优和问题诊断,极大地提高了系统性能分析的效率和深度。随着eBPF技术的不断进步,其在性能...
javasnmp源码-bpf_study:bpf研究
06-04
eBPF,已经完成华丽蜕变,为应用与神奇的内核打造了一座桥梁,在系统跟踪、观测、性能调优、安全和网络等领域发挥重要的角色。为 Service Mesh 打造了具备 API 感知和安全高效的容器网络方案 Cilium,其底层正是基于...
BPF之巅 洞悉Linux系统应用性能——学习(一)
u013201718的博客
08-23 252
BPF之巅 洞悉Linux系统应用性能》 这本“砖头”书的个人学习与笔记,本人于性能这块几乎小白,会出现大量书中内容+部分自己理解,可能有误,欢迎各位大佬指教
BPF Performance Tools - Brendan Gregg.pdf
01-30
BPF Performance Tools: Linux and Application Observability:源代码参加https://github.com/brendangregg/bpf-perf-tools-book
BPF PerformanceTools.epub
08-21
BPF and related observability tools give software professionals unprecedented visibility into software, helping them analyze operating system and application performance, troubleshoot code, and strengthen security. BPF Performance Tools: Linux System and Application Observability is the industry’s most comprehensive guide to using these tools for observability. Brendan Gregg, author of the industry’s definitive guide to system performance, introduces powerful new methods and tools for doing analysis that leads to more robust, reliable, and safer code. This authoritative guide: Explores a wide spectrum of software and hardware targets Thoroughly covers open source BPF tools from the Linux Foundation iovisor project’s bcc and bpftrace repositories Summarizes performance engineering and kernel internals you need to understand Provides and discusses 150+ bpftrace tools, including 80 written specifically for this book: tools you can run as-is, without programming — or customize and develop further, using diverse interfaces and the bpftrace front-end You’ll learn how to use BPF (eBPF) tracing tools to analyze CPUs, memory, disks, file systems, networking, languages, applications, containers, hypervisors, security, and the Linux kernel. You’ll move from basic to advanced tools and techniques, producing new metrics, stack traces, custom latency histograms, and more. It’s like having a superpower: with Gregg’s guidance and tools, you can analyze virtually everything that impacts system performance, so you can improve virtually any Linux operating system or application.
bpftools, BPF工具包分析工具包.zip
10-10
bpftools, BPF工具包分析工具包 BPF工具介绍性博客文章:http://blog.cloudflare.com/bpf-the-forgotten-bytecode/http://blog.cloudflare.com/introducing-the-bpf-t
Linux-Observability-with-BPF.pdf
04-23
Linux-Observability-with-BPF.pdf
BPF PerformanceTools.epub.zip
07-22
BrendanGregg
洞悉linux系统应用性能,BPF Performance Tools:洞悉Linux系统应用性能(英文版)...
weixin_29232507的博客
05-14 353
Part I: Technologies1 Introduction 11.1 What Are BPF and eBPF? 11.2 What Are Tracing, Snooping, Sampling, Profiling, andObservability? 21.3 What Are BCC, bpftrace, and IO Visor? 31.4 A First Look at B...
电子书:《Linux Perf Master》
zijingshanke的专栏
09-01 667
电子书:《Linux Perf Master》 2016年7月份我已经提到,希望能实现一个小目标:出版一本专业书籍。 目标虽小,实现不易。参阅了众多老司机的成功经验,我决定还是先整理一本电子书出来。 主题以Linux性能为核心,覆盖评估诊断、监控、优化的工具和方法论,还补充了几个参考案例。 内容来源于过去一段时间翻译、发表过的文章,部分章节稍微调整了排版,希望有需要的读者朋友们喜欢。 本...
BPF之巅——Linux 60秒分析
ch123456hy的博客
12-21 4202
文章目录Linux 60秒分析uptimedmesg|tailvmstat 1mpstat -P ALL 1pidstat 1iostat -xz 1free -msar -n DEV 1sar -n TCP,ETCP 1top Linux 60秒分析 工具和指标可以聚焦于唾手可得的性能问题:列出十几个常见的问题,以及对应的分析方法,让每个人都能参照检查。此文章翻译的是Brendan Gregg和Netflix性能工程团队的发布部分内容的翻译摘取。 uptime $ uptime 20:08:53 up
性能之癫-优化你的程序
weixin_37097700的博客
08-16 355
outline:关注&指标&度量,基础理论知识,工具&方法,最佳实践,参考资料性能优化关注:CPU、内存、磁盘IO、网络IO等四个方面。性能指标:...
Linux BPF:性能分析与超级能力演示
5. **BPF的应用场景**:文中指出,BPF将被广泛应用于需要高性能、实时性和安全性的领域,如网络流量分析、内核日志记录、系统性能优化等。 6. **BPF架构细节**:BPF字节码、观察程序(Observability Program)和...
写文章

热门文章

  • LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project 30524
  • 分享一个开源的音频分析软件 20772
  • cpufreq 五种模式和手动提升性能脚本 19154
  • recovery 18136
  • 嵌入式和单片机的区别在哪? 17533

分类专栏

  • Linux内存管理大全 付费 19篇
  • Linux进程管理大全 付费 12篇

最新评论

  • 如何使用4G模块通过MQTT协议传输温湿度数据到onenet

    JAVAcode6: mqtt

  • 如何使用4G模块通过MQTT协议传输温湿度数据到onenet

    JAVAcode6: mqtt

  • 如何使用4G模块通过MQTT协议传输温湿度数据到onenet

    JAVAcode6: mqtt

  • 摄像头ov13850移植笔记

    xnfh1996: 博主你好,rk3568最大支持8M,请问sdk中的ov13850.c默认是13M配置,需要修改的吧?能提供下驱动文件吗?谢谢

  • 如何使用4G模块通过MQTT协议传输温湿度数据到onenet

    qq_52415243: mqtt

大家在看

  • 全桥 LLC 过谐振变换器谐振点工作模态详细分析 621
  • P11181 [ROIR 2018 Day2] 书页 题解 964
  • GaussianDreamer: Fast Generation from Text to 3D Gaussians by Bridging 2D and 3D Diffusion Models 641
  • 爱在深秋!故障诊断新模型!MIC-Transformer-Adaboost多特征分类预测/故障诊断 466

最新文章

  • ALSA子系统 | ALSA Buffer的更新
  • 引导内存分配器
  • 一文搞懂DMA
2022年97篇
2021年241篇
2020年139篇
2019年50篇
2018年13篇
2017年19篇
2016年17篇
2015年22篇
2014年39篇
2013年30篇
2012年202篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家濮阳铸造玻璃钢仿铜雕塑厂家玻璃钢恐龙雕塑哪家值得信赖深圳抽象玻璃钢雕塑云浮玻璃钢浮雕雕塑抚州市玻璃钢雕塑定制里水玻璃钢人物雕塑在线下单河南常用商场美陈市场报价玻璃钢雕塑修复报价明细表上海周年庆典商场美陈哪里有乳山玻璃钢气球雕塑楚雄市玻璃钢雕塑价钱广东周年庆典商场美陈采购德阳园林玻璃钢雕塑安装定西商场美陈衢州仿铜西式玻璃钢雕塑陕西玻璃钢马雕塑工厂合肥玻璃钢雕塑制作厂四川玻璃钢老虎雕塑山西景观玻璃钢雕塑销售电话主题商场美陈工艺玻璃钢卡通雕塑推荐货源长治玻璃钢卡通雕塑厂家开业商场美陈市场报价玻璃钢果蔬雕塑报价景观标识玻璃钢彩绘雕塑设计福州景区玻璃钢雕塑制作商场美陈雕塑厂家枝江玻璃钢人物雕塑河南常见商场美陈现价郴州玻璃钢雕塑怎么收费香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化