eBPF Linux 教程eBPF Linux 教程eBPF Linux 教程eBPF Linux 教程
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

eBPF Linux 教程

eBPF 代表扩展伯克利数据包过滤器。当您使用 Linux 并且想要与内核交互时,您需要像 eBPF 这样的框架来帮助您。 eBPF 是一个旨在帮助开发人员无障碍运行低级内核程序的框架。

借助 eBPF,您可以以最小的开销配置快速加载和运行软件。如果您是 eBPF 的新手并且正在使用内核程序,本指南将帮助您了解 eBPF 以及如何使用它。我们将展示一些使用 eBPF 将代码注入内核的实例。让我们开始!

什么是 eBPF

eBPF 是扩展 Berkeley Packer Filter 的缩写。它充当 Linux 内核中的接口,允许开发人员注入代码以与内核交互,例如修改其行为或观察它。

eBPF 最初作为数据包跟踪器发布,但后来于 2014 年进行了扩展并集成到 Linux 内核中。虽然它主要帮助跟踪任务,但它具有很多功能,包括允许用户空间应用程序执行内核空间中的程序。

计算机的内存有用户空间和内核空间。用户程序在用户空间中运行,而内核空间则保留用于运行驱动程序和内核。用户程序不能在内核空间运行。目的是确保不安全的程序或其他漏洞不会被插入内核并使其崩溃。

然而,eBPF 为您提供了一种在内核空间中以字节码形式运行用户程序的途径。由于字节码很难编写,因此需要BCC或Bpftrace等开发框架来编写eBPF程序。这些框架是开源的,任何人都可以使用它们。您可以安装 BCC 或 Bpftrace 框架并创建 eBPF 程序。

安装密件抄送

BCC 是 BPF 编译器集合工具的集合,可帮助编写和运行 eBPF 程序。

首先更新你的 apt 存储库:

sudo apt-get update;

使用以下命令安装 BPF 编译器收集工具:

sudo apt-get install bpfcc-tools linux-headers-$(uname -r);

获取并安装适合您的内核架构的 BCC 工具。按“y”确认安装。

您可以通过运行其中一个工具来获取在终端上运行的任何命令的 PID,以验证 BCC 是否已安装并正常工作。

打开两个终端窗口。在第一个终端上运行以下 bpfcc 命令:

sudo /usr/sbin/bashreadline-bpfcc;

在第二个终端上运行如下图所示的一些命令:

如果 BCC 和 eBPF 在第一个终端上运行,您将看到在第二个窗口中输入的命令的 PID 和时间戳。

您的密件抄送已安装。您现在可以执行不同的 eBPF 程序,将代码注入内核以实现不同的目的。

安装 Bpftrace

除了使用 BCC 框架之外,您还可以使用 Bpftrace 框架。它非常适合不同的任务,并提供命令行实用程序,让用户直接执行 eBPF 命令。

使用以下命令安装它:

sudo apt install bpftrace;

安装 Bpftrace 后,您可以部署 eBPF 程序。让我们看一些使用命令行实用程序部署各种程序的示例。

从 Bpftrace GitHub 存储库中,您可以部署不同的“one-liners”程序。例如,您可以通过运行以下程序列出不同进程的磁盘消耗:

bpftrace -e 'tracepoint:block:block_rq_issue { printf("%s %d\n", comm, args->bytes); }'

从输出中,您会注意到列显示进程名称、磁盘大小和磁盘大小。

输出显示内核中的所有进程。

如果您还想按进程检查系统调用计数,可以通过以下命令使用 Bpftrace one-liners 程序:

sudo bpftrace -e ‘tracepoint:raw_syscalls:sys_enter {@[comm] = count(); }’

按 Ctrl + C 终止命令后会显示系统调用。输出显示进程名称,并且包含映射的报告像关联数组一样显示。

count() 填充系统调用每个进程发生的次数的计数。如果要列出所有探测器,可以使用 bpftrace -l 命令列出它们,如下所示:

sudo bpftrace -l 'tracepoint:syscalls:sys_enter_*'

这就是在 Linux 上使用 eBPF 程序的方式。

结论

eBPF 是一种将代码插入 Linux 内核的方法。您可以使用 BCC 和 Bpftrace 等框架来创建和运行 eBPF 程序。这篇文章介绍了 eBPF 以及编写和运行 eBPF 程序的框架。此外,我们还提供了一些可以运行的 eBPF 程序的示例。就是这样!

©2015-2025 艾丽卡 support@alaica.com