- 深入理解eBPF与可观测性
- 毛文安 郑昱笙 程书意 廖肇燕
- 2327字
- 2025-06-09 17:11:23
Preface
前言
为什么要写这本书
在当今快速发展的技术领域,Linux内核作为开源操作系统的核心,面临着越来越多的挑战。而eBPF作为Linux内核中的一项革命性技术,为我们提供了一种全新的方式来观察和微调系统的状态与行为。随着大模型和人工智能(AI)的迅猛发展,理解和优化操作系统的性能变得尤为重要,这不仅影响着应用程序的表现,还决定着我们如何利用大规模计算资源。
与此同时,随着云原生技术和微服务应用的不断进步,可观测性的技术基石——日志、链路追踪和监控指标,尤其是近年来备受推崇的持续性能优化能力,几乎都在利用eBPF来实现对应用和服务的观测。行业中涌现出了如Pixie、OpenTelemetry等优秀的开源项目。在网络领域,著名的Cilium项目是基于eBPF开发的,而在安全领域,eBPF的LSM技术正在被应用于开源的安全项目(如Falco)中。eBPF技术已成为云原生社区备受瞩目的技术话题之一。
尽管eBPF技术备受关注,但人们对其底层原理,特别是它与内核的关系,理解得并不充分。市场上关于这方面的书籍非常少,特别是专门讨论eBPF技术在Linux内核各子系统中应用的书籍更是凤毛麟角。为此,我们编写了本书,内容涵盖eBPF的指令架构、CO-RE编程原理,并结合Linux内核层面的应用、网络、内存、I/O、调度、安全进行原理和代码级别的深入探讨,使读者能够知其所以然。
本书特色
本书具有以下特色。
1.为专业开发者量身定制
本书专为从事可观测系统开发、云原生应用系统及操作系统开发、网络及安全领域开发工作的eBPF用户打造。本书将深入探讨eBPF的底层工作原理,详细介绍Linux各个子系统的关键技术和数据结构。结合eBPF技术,本书将帮助你解决系统运维中遇到的性能瓶颈和故障定位等问题,并提供丰富的实战案例。
2.满足现代开发需求
许多开发者使用Java、Go等高级语言构建上层应用,但往往忽略了底层系统的重要性,面对CPU性能瓶颈等问题时,常常感到无从下手。本书将帮助你在开发可观测性系统时,更好地定位和解决内核层面的问题。
3.深入Linux内核,掌握核心技术
本书不仅深入探讨eBPF的指令架构和开发方式,还将结合Linux的网络、I/O、内存和调度子系统进行实践。你不仅能深入了解Linux内核的数据结构,还能通过eBPF掌握解析Linux内核状态和行为的方法,特别是复杂的定位和性能分析技巧。
4.结合实际案例,提升系统效能
在探索eBPF时,我们将不局限于技术层面的介绍,还会结合实际案例展示如何利用eBPF监测和优化Linux内核的性能,进而支持系统的高效运作。底层系统的良好运作是实现高效业务的基础。
读者对象
本书的目标读者包括应用开发者、eBPF技术爱好者及可观测领域、操作系统领域的从业人员。
如何阅读本书
虽然在介绍每个Linux子系统可观测实践之前,本书尽量概述了该子系统的技术原理以及eBPF程序可能用到的数据结构,但还是建议读者在阅读之前,先行了解操作系统的一些基础概念,比如进程创建、虚拟文件系统、内存分配和释放、socket通信等内容。
本书从逻辑上分为两大部分,共9章。
第一部分为eBPF基础(第1~3章),介绍eBPF的应用场景和发展历程、指令架构及eBPF的编程方法。
第1章概述了eBPF技术的发展历程,介绍了它在网络、安全、故障诊断和性能分析等领域的应用场景,并阐述了eBPF的基础架构。本章旨在让读者全面了解eBPF是什么、能实现哪些功能,以及如何将其应用到各自的学习、研究和工作中。
第2章详细介绍了eBPF关键特性解析,包括eBPF指令集、辅助函数和程序类型设计原理,帮助读者更深刻地理解和认识eBPF底层原理,特别是在Linux内核中的具体实现。
第3章介绍如何使用libbpf、BCC、eunomia-bpf、Coolbpf等开源项目开发eBPF程序,特别是详细介绍了BTF和CO-RE技术,帮助读者进一步掌握独立开发eBPF程序的技能。
第二部分为eBPF可观测性实践(第4~9章),介绍eBPF在Linux的用户态应用、内核网络、内存、I/O、调度及安全方面的可观测实践案例。
第4章介绍如何使用eBPF在用户应用层面进行可观测实践,如Java应用的GC观测,帮助读者掌握使用eBPF分析微服务应用的性能、延迟、报文数据的方法,进一步理解eBPF的能力。
第5章介绍内核网络的收发包流程、网络抖动问题分析,以及内核网络的可观测性实践,帮助读者掌握使用eBPF分析网络抖动的方法。
第6章主要介绍内存性能瓶颈的优化方法,帮助读者掌握使用eBPF对内存分配延迟、内存泄漏等常见问题进行观测的方法。
第7章介绍I/O子系统的原理和性能瓶颈点,帮助读者掌握使用eBPF对I/O延迟分布、I/O卡顿等问题进行观测的方法。
第8章介绍eBPF在调度系统上的观测实践,如长时间关中断、持续性能追踪等,帮助读者掌握使用eBPF对调度延迟进行分析的方法。
第9章介绍eBPF在系统安全上的实践,如使用LSM进行安全防御以及监控进程的各种行为等。
勘误和支持
因笔者水平有限,书中难免存在一些不足,如果读者在阅读过程中发现疏漏,或者遇到难以理解的知识点,可以发电子邮件到maowawilliam@gmail.com反馈。
参考资料
本书很多内容来自公众号“酷玩BPF”,这是广大eBPF爱好者共同学习的平台。同时,本书也参考了很多国内外的论文、演讲稿。当然,参考最多的还是Linux内核的开源代码。
致谢
感谢龙蜥社区eBPF技术探索SIG的专家们,在撰写本书期间他们提供了大量素材和技术支持。特别感谢来自猎聘的刘特利,贡献了非常优质的实践案例。在写作过程中,我也结交了许多朋友,大家共同探讨eBPF落地中的各种疑难问题与解决方案。
特别感谢西安邮电大学陈莉君教授在操作系统和eBPF技术领域的悉心指导。陈老师一直激励我勇往直前,是我坚持在Linux和eBPF领域探索的强大支柱。
特别感谢龙蜥社区理事长马涛先生和龙蜥社区运维联盟委员会主席冯富秋先生。他们在工作和生活中给予了诸多指导,并提供了各种资源,为本书的写作提供了宝贵意见和建议。
感谢我的同事们在写作期间给予的理解和支持。同时,在可观测性、智能运维和操作系统内核等领域,他们与我分享了许多优秀的实践经验。
最后,特别感谢我的家人。为了写作本书,我牺牲了许多陪伴他们的时间。正是因为他们的关怀和鼓励,我才能够专心致志地完成本书内容的编写。
毛文安