分类 foundation 中的文章

【译】eBPF 概述:第 1 部分:介绍

本系列导航: eBPF 概述:第 1 部分:介绍 eBPF 概述:第 2 部分:机器和字节码 eBPF 概述:第 3 部分:软件开发生态 eBPF概述:第 4 部分:在嵌入式系统运行 eBPF概述:第 5 部分:追踪用户进程 原文地址:https://www.collabora.com/news-and-blog/blog/2019/……

阅读全文

基于 Ubuntu 21.04 BPF 开发环境全攻略

本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基于 Ruby,主要以命令行的方式运行。Vagrant 由 HashiCorp 官方出品,相信提到大名鼎鼎的 HashiCorp 公司,大家还能够联想到著名的安全密码存……

阅读全文

【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 中注册的对应函数列……

阅读全文

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 发行版已经内置该参数编译,比……

阅读全文

【BPF入门系列-10】使用 tracepoint 跟踪文件 open 系统调用

1. 什么是 tracepoint tracepoint 的介绍可以参见 Kernel 文档这里。从 Linux 内核 4.7 开始,eBPF 程序可以挂载到内核跟踪点 tracepoint。在此之前,要完成内核中函数跟踪的工作,只能用 kprobes/kretprobe 等方式挂载到导出的内核函数(参见 /proc/kallsyms),正如我们前几篇文章跟踪 open 系统调用方式那样。尽管 kprobes 可以达到跟踪的……

阅读全文

【BPF入门系列-9】文件打开记录结果跟踪篇

1. 前言 在上篇文章中我们为文件 open系统调用采用了 perf_event 的方式将数据从内核上报至用户程序。但是到目前为止,我们只是实现了文件打开记录的跟踪,并没有对文件访问的结果是成功还是失败进行展示。 与 kprobe 相对应的 kretprobe 实现可以帮助我们获取到 sys_open 函数的返回值。为了拿到 sys_open 系统调用的详细信息和返回结果,我们需……

阅读全文