LPC 2026 eBPF 议程前瞻:Rust 要进 verifier,BPF 被推上 CVE 空窗期前线
每年秋天,内核社区最核心的开发者都会聚到一起,把接下来一两年要落地的东西摊开来吵一遍。今年的 Linux Plumbers Conference 定在 10 月 5 日到 7 日,捷克布拉格。
每年秋天,内核社区最核心的开发者都会聚到一起,把接下来一两年要落地的东西摊开来吵一遍。今年的 Linux Plumbers Conference 定在 10 月 5 日到 7 日,捷克布拉格。
本文针对零侵入主动性能数据探测工具 xstack 的构建、使用、原理和源码实现进行了整体介绍,在高版本内核中如有类似场景的需求,可直接使用或定制,该工具代码相对简单清晰,也可作为我们学习编写 eBPF 工具的参考样例。
我们使用 Rust + eBPF 构建了一个系统调用跟踪器。这里,我们将解析使其工作的核心组件以及为 eBPF 工具提供核心动力的深层机制。理解这些核心组件将帮助你构建更复杂的可观测性、安全性和网络工具。
本文介绍了 BPF 编写过程中的循环写法、使用场景和对应的内核版本,循环方式包括早期的 unroll 机制、有界循环 Bounded Loop、循环辅助函数 Loop Helper …
通常,要装载到内核的 BPF 程序是用 C 语言编写的,但是这些程序运行的环境与 C 环境有明显的不同。BPF 虚拟机和相关的验证器为了使 BPF 代码安全运行,进行了越来越多的检查。BPF 的迭代器机制的新增突出了正在增加的功能, …
BPF 是 Linux 内核中基于寄存器的虚拟机,可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同,BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制,以确保最大的 …
eBPF(扩展伯克利数据包过滤器)在整个 2022 年的表现的可圈可点。随着 2023 年帷幕逐步拉开,对于 eBPF 我们有了更加多的期待。以下为我们认为在 2023 年需要关注的 eBPF 关键趋势:
Linux 内核 6.1 版本中有一个非常引人注意的变化:引入了对 Rust 编程语言的支持。Rust 是一种系统编程语言,Rust 通过提供非常强大的编译时保证和对内存生命周期的明确控制。在内核开发中引入 Rust 语言,将会为内核开发的 …
这篇文章首先介绍尾调用的一般限制和用法,并与 BPF to BPF calls 做对比,最后给出一个我对内核源码中 tail call sample 做的一个修改版本(应用 CO-RE)。(我在学习尾调用的时候苦于没有一个能跑起来的简单易懂 …
eBPF 是一项广为人知的技术,已经在可观测、网络和安全领域领域得到广泛应用。Linux 操作系统提供了虚拟机,可用于安全和高效的方式运行 eBPF 程序。eBPF 程序挂载在操作系统提供的钩子上,使其能够在内核中发生特定事件时过滤和提取感 …
Linux 内核中的调试符号包含源代码级别的信息,如函数名称、函数调用约定、以及源代码行号到指令的映射。这些信息在调试或剖析内核的时候非常有用。在本文中,我将展示如何在 Ubuntu 上获得任何内核的调试符号。
如果你只是需要快速使用工具来进行问题排查,包括但不限于函数调用栈跟踪、函数调用子函数流程、函数返回结果,那么推荐你直接使用 Brendan Gregg 封装的 perf-tools工具即可,本文尝试从手工操作 Ftrace 跟踪工具的方式展 …
确切说,vmlinux.h 是使用工具生成的代码文件。它包含了系统运行 Linux 内核源代码中使使用的所有类型定义。当我们编译 Linux 内核时,会输出一个称作 vmlinux 的文件组件,其是一个 ELF 的二进制文件,包含了编译好 …
在 BPF 程序中可以通过声明 struct bpf_map_def 结构完成创建,这其实带给我们一种错觉,感觉这和普通的 C 语言变量没有区别,然而事实真的是这样的吗? 事情远没有这么简单,读完本文以后相信你会有更大的惊喜。
本文从什么是 eBPF,eBPF 的应用场景和工作原理入手,然后介绍了使用 Python/C/Go 开发 eBPF 程序的生态环境和使用样例,最后介绍了 eBPF 未来的发展趋势
来自 Facebook 的 Roman Gushchin 提交的一个内核 patch 将 BPF 程序引入到了内核调度器模块,根据 Facebook 内部的测试表明主要网络负载的延迟得到了改善且 RPS 有 1% 左右的提升,虽然这个机制 …
在网上进行了进一步的挖掘,阅读了最初的设计论文并观看了几个视频后,eBPF 这项技术引起了我的注意,所以我想写一些关于 eBPF 的笔记,当然,我也希望这篇文章也能够引发你对 eBPF 的兴趣。
到目前为止,我们故意避免深入讨论用户空间跟踪,因为它值得特别对待,因此我们在第 5 部分中专门讨论。首先,我们将讨论为什么使用,然后我们将 eBPF 用户跟踪分为静态和动态两类分别讨论。
在这一部分中,我们将从另外一个视角来分析项目,尝试解决嵌入式 Linux 系统所面临的一些独特的问题:如需要非常小的自定义操作系统镜像,不能容纳完整的 BCC LLVM 工具链/python 安装,或试图避免同时维护主机的交叉编译(本地)工 …
为了理解这些工具是如何工作的,我们先定义一下 eBPF 程序的高层次组件:后端、加载器、前端和数据结构等。开发方式包括 LLVM eBPF 编译器/BCC/BPFTrace/IOVisor等实现
本系列的第2部分对第1部分中研究的eBPF虚拟机和程序进行了更深入的探讨。掌握这些低层次的知识并不是强制性的,但可以为本系列的其他部分打下非常有用的基础,我们将在这些机制的基础上研究更高层次的工具。
有兴趣了解更多关于 eBPF 技术的底层细节?那么请继续移步,我们将深入研究 eBPF 的底层细节,从其虚拟机机制和工具,到在远程资源受限的嵌入式设备上运行跟踪。
本文基于 Ubuntu 21.04 版本使用 Vagrnt 和 VirtualBox 打造了 BPF 编译环境,同时提供了命令行升级内核和手工编译内核升级的方式
BTF(BPF 类型格式)是一种元数据格式,对与 BPF 程序 /map 有关的调试信息进行编码。BTF 这个名字最初是用来描述数据类型。后来,BTF 被扩展到包括已定义的子程序的函数信息和行信息。调试信息可用于 map 的更好打印、函数签 …
eBPF 的生态欣欣向荣,无论是 eBPF 本身及其各种应用(包括 XDP) 方面都有大量的学习资源。但当涉及到选择库和工具来与 eBPF 进行交互时,会让人有所困惑。在选择时,你必须在基于 Python 的 BCC 框架、基于 C …
本文对于 netfilter 实现机制和 iptables 使用进行了完整的分析,最后使用 ebpf 的 kprobe 和 kreprobe 对于 netfilter 中的 hook 点底层调用函数 ipt_do_table 进行跟踪。
本文基于 ubuntu 20.04 版本,对于 kdump 的原理、安装和使用进行了详细的说明,并给出了 crash 工具常用的命令说明
本文介绍了 pstack 打印程序运行堆栈,golang 中如何输出 goroutine 堆栈和如何使用 sysrq 输出系统运行的线程堆栈;同时对于函数级别的调用栈和子函数调用工具也给出了介绍
将基于 BCC 的 BPF 应用程序转换为 libbpf 和 [BPF CO-RE](https://nakryiko.com/posts/bpf-portability-and-co-re/) 的实践指南。
本文采用 tracepoint 的方式实现了 open 系统调用的跟踪,从而提升了跟踪程序的可移植性,同时基于 BPF 调试参数对于 BCC 宏 TRACEPOINT_PROBE 实现中的 args 参数的定义给出了说明;文中给出了完整的实 …
本文在使用 perf_event 跟踪 sys_open 的基础上,使用 kretprobe 机制实现了函数结果返回值的跟踪。由于入口与出口跟踪是两种机制,需要在两个函数中实现。 …
本文中我们将使用更加高效且提供隔离功能的 BPF_PERF_OUTPUT 机制来实现数据的传递,并对上篇文章中的代码进行改造,对于核心代码逻辑进行详细讲解
本文主要用于演示基于 ebpf 技术来实现对于系统调用跟踪和特定条件过滤,实现基于 [BCC](https://github.com/iovisor/bcc/) 的 Python 前端绑定,过程中对于代码的实现进行了详细的解释, …
今天,我们很高兴地宣布一个新的微软开源项目,以使 eBPF 在 Windows 10 和 Windows Server 2016 及以后的版本上运行。旨在让开发者在现有版本的 Windows 之上使用熟悉的eBPF工具链和应用编程接 …
BTF 和 CO-RE 这两项新技术为 BPF 成为价值十亿美元的产业铺平了道路。目前,有许多 BPF(eBPF)初创公司正在构建网络,安全性和性能产品(并且更多未浮出水面的),但是要求客户安装 LLVM,Clang 和内核头文件依赖(可能 …
译者:范彬 原文地址:BPF ring buffer 当前 perf 缓冲区已成为从内核向用户空间发送数据的标准。BPF 环形缓冲区是一个新的BPF数据结构,解决了 BPF perf 缓冲区内存效率和事件重新排序的问题, …
BPF 可移植性和 CO-RE(一次编译,到处运行)的详细细节
本文作者: 范彬 1 前言 随着容器技术的发展,越来越多业务甚至核心业务开始采用这一轻量级虚拟化方案。作为一项依然处于发展阶段的新技术,容器的安全性在不断提高,也在不断地受到挑战。天翼云云容器引擎于去年11月底上线,目前已经在22个自研资源 …
1. 前言 在 bpf 的实现中我们经常在内核 helper 函数 bpf_get_current_pid_tgid() 来进行用户空间进程 pid 进行过滤,那么到底如何写呢? 在 BCC …
1. 内核版本选择 补丁 Prepatch: Prepatch 或 “RC” 内核是主线内核的预发布版本,主要针对其他内核开发者和 Linux 爱好者。它们必须从源码中编译,并且通常包含新的功能,这些功能必须在稳定发布之前进行测 …
1. 为什么要学习 BPF 可以先从 ebpf.io 网站获取一个简单的了解,首页内容翻译如下。 Linux 内核一直是实现监控/可观察性、网络和安全性的理想场所。不幸的是,这往往是不切实际的,因为它需要改变内核源代码或加载内核模块,并导致 …
eBPF 技术简介 由范老师和我一起翻译的图书 《Linux内核观测技术BPF》 已经在 JD 上有现货,欢迎感兴趣 BPF 技术的同学选购。链接地址 https://item.jd.com/72110825905.html “eBPF 是 …