购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

2015年,David是Docker公司(一家让容器技术变得流行的公司)的一名核心开发工程师。他的日常工作包括两部分:维护Docker社区和促进Docker项目发展。他既需要审查贡献者提交的PR,也需要确保Docker可以在各种场景下稳定高效地工作,特别是在成千上万容器运行的高负载场景下。

当时,我们采用火焰图来分析Docker相关的性能问题。火焰图提供的高级可视化功能,可以让我们非常方便地浏览分析的数据。Go语言通过内嵌的HTTP服务可以非常容易地提取到应用的性能数据,并能够基于性能数据产生数据图表。David曾写过一篇文章,讲述Go语言的性能分析器,并描述如何基于数据生成火焰图。但是,使用Go语言性能分析器来收集Docker的性能数据也存在着一些问题,因为性能分析器的功能默认是关闭的。所以,如果要开启性能调试,我们必须要重启Docker服务,这可能导致失去运行时的性能数据,迫使我们花费时间等待问题再次重现。David的文章中提到了重启Docker是诊断Docker性能问题的必要步骤。但是,最好的方式应该是不重启服务就能达到分析性能问题的目的。这驱使David开始研究收集和分析程序性能指标的各种技术,不久他就发现了BPF。

与此同时,与David相距甚远的Lorenzo,也在寻求一种更好地研究Linux内核内部机制的方式,他发现学习BPF可以更容易地了解更多的内核子系统。几年后,他已经在InfluxData的工作中应用了BPF技术,以更快地在InfluxCloud中提取数据。如今Lorenzo不仅活跃于BPF社区,他还就职于Sysdig公司,从事Falco项目中IOVisor工具的开发——IOVisor使用BPF来保证容器和Linux系统的运行时安全。

在过去的几年时间内,我们已经尝试在更多的场景中使用BPF,包括收集Kubernetes集群数据、管理网络流量策略。通过阅读BPF领导者Brendan Gregg、Alexei Starovoitov,以及Clilium和Facebook公司的诸多技术博客,我们学习了BPF技术的底层原理。他们的博客和文章给予了我们极大的帮助,同时也是本书诸多引用的来源。

每次学习BPF技术时,我们都需要翻阅博客文章、手册以及Internet上的各种资料。本书的目的就是将分散在各处的知识汇总在一起,以便于BPF爱好者能更好地学习这一神奇技术。

本书分为9章演示如何使用BPF完成相关任务。你可以单独阅读一些章节作为参考指南,但是如果你是BPF的新手,我们建议你按顺序阅读。这样你可以了解BPF的核心概念,并逐步了解BPF在未来可能发挥的作用。

无论你是可观测性和性能分析方面的专家,还是正尝试开始研究新技术来解决生产系统问题的新手,我们都希望你能从本书中受益。

本书排版约定

下面是本书中使用的排版约定:

斜体(Italic)

表示新术语、URL、Email、文件名及文件扩展名。

等宽字体(Constant Width)

表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

等宽粗体(Constant width bold)

表示命令或其他由用户直接输入的文本。

等宽斜体(Constant Width Italic)

表示应当被用户提供的值或上下文决定的值所替换的文本。

这个图标表示提示或建议。

这个图标表示一般说明。

这个图标表示警告或注意。

示例代码

可以从 https://oreil.ly/lbpf-repo 下载补充材料(示例代码、练习等)。

这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的配套CD-ROM则需要O’Reilly出版社的许可。引用本书的示例代码来回答一个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的产品文档中则需要获得许可。

非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处的形式包含书名、作者、出版社和ISBN,例如:

Linux Observability with BPF,作者David Calavera和Lorenzo Fontana,由O’Reilly出版,书号为978-1-492-05020-9

如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permission@oreilly.com联系我们。

O’Reilly在线学习平台(O’Reilly Online Learning)

近40年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问 http://oreilly.com

如何联系我们

对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。

美国:

O’Reilly Media,Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

要询问技术问题或对本书提出建议,请发送电子邮件至bookquestions@oreilly.com。

本书配套网站 https://oreil.ly/linux-bpf 上列出了勘误表、示例以及其他信息。

关于书籍、课程、会议和新闻的更多信息,请访问我们的网站 http://www.oreilly.com

我们在Facebook上的地址: http://facebook.com/oreilly

我们在Twitter上的地址: http://twitter.com/oreillymedia

我们在YouTube上的地址: http://www.youtube.com/oreillymedia

致谢

写这本书比我们想象的要难,但这本书可能是我们一生中做得最有益的事情之一。我们为此付出了夜以继日的努力。感谢我们的合作伙伴、家人、朋友的帮助。感谢Lorenzo的女朋友Debora Pace,还有他的儿子Riccardo,感谢他们在我们漫长的写作过程中的耐心等待。同时感谢Lorenzo的朋友Leonardo Di Donato提出的建议,特别是关于XDP和测试部分的意见。

感谢David的妻子Robin Means为我们校对部分章节的初稿。感谢她对本书开始章节的审阅,以及多年以来对David写作的帮助。

同时,感谢那些对eBPF和BPF做出贡献的人们。感谢David Miller和Alexei Starovoitov持续改进Linux内核和BPF。感谢Brendan Gregg的分享、热情及在BPF工具上的贡献。感谢IOVisor项目组的同事,感谢他们的共识、电子邮件和在bpftrace、gobpf、kubectl-trace、BCC方面所做的贡献。感谢Jessie Frazelle为我们撰写序言,并激励着我们和成千上万的开发者。感谢Jérôme Petazzoni出色的技术审校,他提出的问题让我们对本书中许多章节和代码样例提供的方法重新进行了思考。

感谢所有成千上万的Linux内核贡献者,特别是在BPF邮件列表中活跃的人,感谢他们提供的问题和答案、补丁和他们的主动性。最后,我要感谢参与这本书出版的所有人,包括我们的编辑John Devins和Melissa Potter,还有所有幕后(包括封面制作、审阅到出版)的工作人员,他们是我们见过的最专业的人。 D5oN6ZoQVjmyiag03XM1Ds3GqIqhgISre3EqKd/VWeI/6qVSWYAABEn2kN+Da+0C

点击中间区域
呼出菜单
上一章
目录
下一章
×