《BPF Performance Tools —— 洞悉Linux系统和应用性能》学习笔记 —— 第一章 介绍(1)

本章介绍了一些关键术语,概述了相关技术,并演示了一些BPF性能工具。这些技术将在以下章节中进行更详细的阐明。

1.1 BPF和eBPF是什么?

BPF是Berkeley Packet Filter的缩写,一种于1992年首次开发的鲜为人知、晦涩难懂的技术,其引入了性能或数据包捕获工具。2013年,阿列克谢·斯塔罗沃伊托夫(Alexei Starovoitov)对BPF进行了重大改写,由Alexei和Daniel Borkmann进一步开发,并于2014年包含在Linux内核中。这将BPF变成了一个通用执行引擎,可以用于各种事情, 包括先进(高级)性能分析工具的创建。

BPF很难准确解释,因为它可以做很多事情。BPF提供了一种在各种内核和应用程序事件上运行迷你程序的方法。如果你熟悉JavaScript,你能够看到一些相似之处:JavaScripts允许一个网站在浏览器事件(如鼠标点击)上运行迷你程序,从而启用各种基于web的应用程序。BPF 允许(Linux)内核在系统和应用事件上运行迷你程序(如磁盘I/O),从而使能新的系统技术。BPF使得内核完全可编程,允许用户(包括非内核开发人员)自定义及控制他们的系统,以解决现实世界中的问题。

BPF是一种灵活有效的技术,由指令集存储对象辅助函数组成。由于其虚拟指令集规范,BPF可以被视为虚拟机。这些指令由Linux内核BPF runtime执行,其包括一个解释器和一个JIT编译器,用于将BPF指令转换为本机指令以供执行。BPF指令必须首先通过一个检查安全性的验证器,以确保编写不合逻辑的程序不会崩溃或损坏内核(然而,它并不能阻止最终用户编写那些可以执行的但没有意义的不合逻辑的程序)。BPF的组成部分在第2章详细阐明。

到目前为止,BPF的三个用途是联网、可观察性和安全性。本书聚焦于可观察性(追踪)。

扩展BPF通常缩写为eBPF,但官方缩写仍然是BPF,没有“e”,因此在本书中,使用BPF来指代扩展的BPF。内核只包含一个执行引擎,BPF(扩展BPF),它同时运行扩展BPF和“经典”BPF。

你可能感兴趣的:(eBPF,eBPF)