BPF BTF 详解

本文地址:https://www.ebpf.top/post/kernel_btf/ 英文文档:https://www.kernel.org/doc/html/latest/bpf/btf.html 1. 介绍 BTF(BPF 类型格式)是一种元数据格式,对与 BPF 程序 /map 有关的调试信息进行编码。……

阅读全文

深入浅出 BPF TCP 拥塞算法实现原理

本文地址:https://www.ebpf.top/post/ebpf_struct_ops 1. 前言 eBPF 的飞轮仍然在快速转动,自从 Linux 内核 5.6 版本支持 eBPF 程序修改 TCP 拥塞算法能力,可通过在用户态修改内核中拥塞函数结构指针实现;在 5.13 版本中该功能又被进一步优化,增加了该类程序类型直接调用部分内核……

阅读全文

深入浅出 eBPF 安全项目 Tracee

1. Tracee 介绍 1.1 Tracee 介绍 Tracee 是一个用 于 Linux 的运行时安全和取证工具。它使用 Linux eBPF 技术在运行时跟踪系统和应用程序,并分析收集的事件以检测可疑的行为模式。Tracee 以 Docker 镜像的形式交付,监控操作系统并根据预定义的行为模式集检测可疑行为。官网文档参见这里。 Tracee 由以下子项目组成: Trace-eBPF - 使用 eBPF 进行 Linux 追踪和取证……

阅读全文

【BPF入门系列-12】【译】eBPF 和 Go 经验初探

原文地址:https://networkop.co.uk/post/2021-03-ebpf-intro/ 本站相关文档:使用 Go 语言管理和分发 ebpf 程序 1. 前言 eBPF 的生态欣欣向荣,无论是 eBPF 本身及其各种应用(包括 XDP) 方面都有大量的学习资源。但当涉及到选择库和工具来与 eBPF 进行交互时,会让人有……

阅读全文

【BPF入门系列-11】使用 eBPF 技术跟踪 Netfilter 数据流过滤结果

1. 网络层数据流向与 Netfilter 体系 图 1-1 为网络层内核收发核心流程图,在函数流程图中我们可以看到 Netfliter 在其中的位置(图中深色底纹圆角矩形)。图中对应的 hook 点有 5 个,每个hook 点中保存一组按照优先级排序的函数列表: NF_IP_PREROUTING:接收到的包进入协议栈后立即触发此 hook 中注册的对应函数列……

阅读全文

使用 Go 语言管理和分发 ebpf 程序

1. Go 语言管理 eBPF 程序库 1.1 cilium/ebpf cilium/ebpf 库是 Cilium 项目的一个子项目。仅使用 Go 语言编写的库,提供了加载、编译和调试 eBPF 程序的功能。它具有最小的外部依赖性,适合在长期运行的进程中使用。库主要有由 Cloudflare 和 Cilium 两家公司维护,由于 Cilium 产品的火爆程度,该库的活跃度在社区层面还是会持续演进和发展。 cilium/ebpf 已经满足生产可用,但 API……

阅读全文

Ubuntu 20.04 Kdump + Crash 初体验

1. Kdump 工作原理介绍 内核崩溃转储指的是在内核异常情况时,将 RAM 中部分内容进行转储到磁盘或者其他存储中。当内核发生 panic 时,内核依靠 kexec 机制在预先保留的内存区域快速重启一个新的内核实例,预留内存区域大小可通过内核启动参数 crashkernel 指定。 为了实现 “双内核” 布局,Kdump 在内核崩溃后立即使用 kexec 引导到转储……

阅读全文

来来,让我看看你究竟在干什么?

1. 系统的线程栈跟踪(内核) 在某些特殊场景中,我们可能会遇到偶发系统内核 CPU 抖动,这时候我们可能需要知晓动时刻内核中的所有运行任务的一个快照,这种场景下 sysrq 可以完全满足我们的需求。 如果只是需要分析系统的热点路径,perf 会是一个比较好的选择。 1.1 sysrq 是什么? sysrq 代表的是 Magic System Request Key。开启了该……

阅读全文

Linux 进程管理

本文是技术团队内部分享的版本,目的是通过进程管理及调度器历史对于 Linux 进程管理的演进过程起到一个总览的作用,完整的 PDF 可以在这里 下载。水平有限,本文内容仅供参考,有错误欢迎指正。 1. 基础知识 进程类型 实时进程 非实时进程 CPU 资源占用类型 CPU 消耗性 (CPU-Bound) I/O 消耗性 (IO-Bound)……

阅读全文

BCC 到 libbpf 的转换指南【译】

[TOC] 译者注: BPF CO-RE 项目在未来将会是非常流行的技术,其让 BPF 编写的工具能够像用户编写的其他程序一样进行二进制分发,不再需要目标机器在 BCC 框架下的 llvm/clang/linux-dev 等包的安装,并且可以跨越不同版本的内核。唯一的要求是需要运行的程序的内核采用了支持 CONFIG_DEBUG_INFO_BTF 内核编译选项,可喜的是当前不少 Linux 发行版已经内置该参数编译,比……

阅读全文