【译】eBPF 概述:第 1 部分:介绍 2021年9月29日 | BPF Foundation Ebpf-Overview 本系列导航: eBPF 概述:第 1 部分:介绍 eBPF 概述:第 2 部分:机器和字节码 eBPF 概述:第 3 部分:软件开发生态 eBPF概述:第 4 部分:在嵌入式系统运行 eBPF概述:第 5 部分:追踪用户进程 原文地址:https://www.collabora.com/news-and-blog/blog/2019/…… 阅读全文
基于 Ubuntu 21.04 BPF 开发环境全攻略 2021年9月29日 | System Foundation 本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基于 Ruby,主要以命令行的方式运行。Vagrant 由 HashiCorp 官方出品,相信提到大名鼎鼎的 HashiCorp 公司,大家还能够联想到著名的安全密码存…… 阅读全文
【BPF入门系列-12】【译】eBPF 和 Go 经验初探 2021年8月31日 | Foundation BPF 原文地址:https://networkop.co.uk/post/2021-03-ebpf-intro/ 本站相关文档:使用 Go 语言管理和分发 ebpf 程序 1. 前言 eBPF 的生态欣欣向荣,无论是 eBPF 本身及其各种应用(包括 XDP) 方面都有大量的学习资源。但当涉及到选择库和工具来与 eBPF 进行交互时,会让人有…… 阅读全文
【BPF入门系列-11】使用 eBPF 技术跟踪 Netfilter 数据流过滤结果 2021年8月24日 | Foundation Network 1. 网络层数据流向与 Netfilter 体系 图 1-1 为网络层内核收发核心流程图,在函数流程图中我们可以看到 Netfliter 在其中的位置(图中深色底纹圆角矩形)。图中对应的 hook 点有 5 个,每个hook 点中保存一组按照优先级排序的函数列表: NF_IP_PREROUTING:接收到的包进入协议栈后立即触发此 hook 中注册的对应函数列…… 阅读全文
Ubuntu 20.04 Kdump + Crash 初体验 2021年8月1日 | System Foundation 1. Kdump 工作原理介绍 内核崩溃转储指的是在内核异常情况时,将 RAM 中部分内容进行转储到磁盘或者其他存储中。当内核发生 panic 时,内核依靠 kexec 机制在预先保留的内存区域快速重启一个新的内核实例,预留内存区域大小可通过内核启动参数 crashkernel 指定。 为了实现 “双内核” 布局,Kdump 在内核崩溃后立即使用 kexec 引导到转储…… 阅读全文
来来,让我看看你究竟在干什么? 2021年7月20日 | System Foundation 1. 系统的线程栈跟踪(内核) 在某些特殊场景中,我们可能会遇到偶发系统内核 CPU 抖动,这时候我们可能需要知晓动时刻内核中的所有运行任务的一个快照,这种场景下 sysrq 可以完全满足我们的需求。 如果只是需要分析系统的热点路径,perf 会是一个比较好的选择。 1.1 sysrq 是什么? sysrq 代表的是 Magic System Request Key。开启了该…… 阅读全文
Linux 进程管理 2021年7月5日 | System Foundation 本文是技术团队内部分享的版本,目的是通过进程管理及调度器历史对于 Linux 进程管理的演进过程起到一个总览的作用,完整的 PDF 可以在这里 下载。水平有限,本文内容仅供参考,有错误欢迎指正。 1. 基础知识 进程类型 实时进程 非实时进程 CPU 资源占用类型 CPU 消耗性 (CPU-Bound) I/O 消耗性 (IO-Bound)…… 阅读全文
BCC 到 libbpf 的转换指南【译】 2021年6月15日 | BPF Foundation BPF-CORE [TOC] 译者注: BPF CO-RE 项目在未来将会是非常流行的技术,其让 BPF 编写的工具能够像用户编写的其他程序一样进行二进制分发,不再需要目标机器在 BCC 框架下的 llvm/clang/linux-dev 等包的安装,并且可以跨越不同版本的内核。唯一的要求是需要运行的程序的内核采用了支持 CONFIG_DEBUG_INFO_BTF 内核编译选项,可喜的是当前不少 Linux 发行版已经内置该参数编译,比…… 阅读全文
【BPF入门系列-10】使用 tracepoint 跟踪文件 open 系统调用 2021年6月5日 | BPF Foundation 1. 什么是 tracepoint tracepoint 的介绍可以参见 Kernel 文档这里。从 Linux 内核 4.7 开始,eBPF 程序可以挂载到内核跟踪点 tracepoint。在此之前,要完成内核中函数跟踪的工作,只能用 kprobes/kretprobe 等方式挂载到导出的内核函数(参见 /proc/kallsyms),正如我们前几篇文章跟踪 open 系统调用方式那样。尽管 kprobes 可以达到跟踪的…… 阅读全文
【BPF入门系列-9】文件打开记录结果跟踪篇 2021年6月4日 | BPF Foundation 1. 前言 在上篇文章中我们为文件 open系统调用采用了 perf_event 的方式将数据从内核上报至用户程序。但是到目前为止,我们只是实现了文件打开记录的跟踪,并没有对文件访问的结果是成功还是失败进行展示。 与 kprobe 相对应的 kretprobe 实现可以帮助我们获取到 sys_open 函数的返回值。为了拿到 sys_open 系统调用的详细信息和返回结果,我们需…… 阅读全文