ebpf
文章平均质量分 93
dwh0403
这个作者很懒,什么都没留下…
展开
-
BPF 跟踪机制之原始跟踪点 rawtracepoint 介绍、使用和样例
本文就 Linux Trace 跟踪过程中的主要 Hook 点给出了简单介绍,然后重点介绍了 rawtracepoint 类型出现的背景,性能测试说明,并通过 libbpf 和 bpftrace 分别基于 task_rename 给出了完整实现,介绍过程结合 tracepoint 跟踪点给出对比说明。原创 2024-03-11 23:47:53 · 787 阅读 · 1 评论 -
2024 年 eBPF 和网络趋势预测
在将来作者预测会有更多的 eBPF 应用在移动设备上的使用案例,不仅限于安卓设备。观测集群中发生的一切将会带来巨大的数据量,这将会显著增加可观测性的成本开销,特别是涉及数百个 Kubernetes 集群和数十万个 Pod 场景中。有趣的是,另一种流行的云原生技术 Wasm 也有类似的说法,Wasm 提供了一个能够在 Web 浏览器中运行 C/C++、C# 和 Rust 程序的抽象。的目标是确保 eBPF 程序安全运行,并防止危险行为,但随着 eBPF技术广泛的应用,可能会出现某些形式的漏洞被利用。原创 2024-01-27 23:29:44 · 759 阅读 · 0 评论 -
使用 libbpf 编写 BPF 应用程序进阶技巧
框架适用于几乎所有情景,但有一种特殊情况:性能事件(perf events)。这种情况下,你不需要使用中的link。这是因为perf_event需要在每个 CPU 上单独打开。之后,你还需要自行open和attachperf_event.freq = 1,int i, fd;for (i = 0;"%d\n", i);close(fd);return -1;return 0;最后,在清理阶段,记得要销毁links中的每个link,然后销毁links。原创 2024-01-15 14:40:34 · 843 阅读 · 0 评论 -
BPF 程序与信号交互大揭秘
这与抢占式用户空间是正交的,在抢占式用户空间中,调度器抢占运行在用户模式的进程。如果有致命信号设置,它们会向调用方返回错误,将系统调用栈展开直到返回用户空间的那一点,然后程序会像我们之前看到的那样终止。例如,在自旋锁上没有在正确的时机禁用抢占可能导致另一个进程无限期地在抢占的进程的锁上自旋。作为 eBPF 的安全机制时的一些陷阱,尽管大多数情况下可靠地使用,但我们的确需要对它们运行的环境有深刻的理解。然而,不幸的是,正如后面的部分所示,这也是不可靠的。此外,我们还将确定和观察在处理这些信号背后我的影响。原创 2024-01-15 14:36:11 · 937 阅读 · 0 评论 -
一文全面了解 LSM BPF (含实战,强烈建议收藏)
本文简单介绍了 LSM 框架的基础知识,并基于 LSM BPF 给出了 BCC 和 libbpf 库的实现样例,希望能够让你快速入门 LSM BPF 的编程。如果你对 LSM BPF 的应用场景希望有更多的了解,推荐你进一步阅读[使用 eBPF LSM 热修复 Linux 内核漏洞](https://blog.cloudflare.com/zh-cn/live-patch-security-vulnerabilities-with-ebpf-lsm-zh-cn/ ),在该文中作者基于容器环境中 USER 命原创 2024-01-05 13:13:02 · 1337 阅读 · 0 评论 -
BPF 通用迭代器机制
通常,要装载到内核的 BPF 程序是用 C 语言编写的,但是这些程序运行的环境与 C 环境有明显的不同。BPF 的迭代器机制的新增突出了正在增加的功能,以及 BPF 给程序员带来的限制。它还可以接受任意数量的其他参数。我们建立了一个框架来实现所有类型的迭代器(例如 cgroup,task,file 等迭代器),但是这个补丁集只实现了数字迭代器,用于实现符合人体工程学的 bpf_for() 样的结构。在程序加载时,BPF 验证器进行的诸多检查之一是为了确保程序在合理的时间内终止,这个过程需要模拟程序的执行。原创 2023-12-24 15:49:25 · 869 阅读 · 0 评论 -
Cisco 将收购 Cilium 母公司 Isovalent,预计 2024 年第 3 季度完成
2023 年 12 月 21 日,Isovalent 公司 CTO & 联合创始人 Thomas Graf 和 Cisco 安全业务集团高级副总裁兼总经理 Tom Gillis 分别在各自公司网站公布了思科打算收购 Isovalent 公司的计划,双方都没有公布收购的价格。当一家大公司收购一家建立在像这样的流行开源项目上的初创公司时,事情可能并不是那么简单,这可能会在社区和依赖该软件的大公司面发生方向性的选择。CIsco 意在通过收购,意在增强其在多云网络和安全的能力。原创 2023-12-24 15:54:34 · 952 阅读 · 0 评论 -
什么等等? I/O Wait ≠ I/O 瓶颈?
I/O Wait 是针对单个 CPU 的性能指标,表示当 CPU 分发队列(在睡眠态)里有线程被阻塞在磁盘 I/O 上时消耗的空闲时间。CPU 的空闲时间划分成无所事事的真正空闲时间和阻塞在磁盘 I/O 上的时间。较高的 CPU I/O Wait 时间表示磁盘可能存在瓶颈,导致 CPU 等待而空闲。如果你看到这个定义,有点雾中看花的感觉,那么请移步往后,相信你看完本文的测试验证过程,再回来读上述定义的时候一定会有不同的认识。经过上述测试,我们可以看到 I/O Wait 可能是一个令人非常困惑的指标。原创 2023-12-24 15:53:16 · 846 阅读 · 0 评论 -
eBPF 进阶: 内核新特性进展一览
程序 BTF 中用户定义的 BPF 类型对象, 这使得 BPF 程序可以分配自己的对象,构建自己的对象层次结构,并使用 BPF 运行时提供的基本构建块灵活地构建自己的数据结构。int data;int ret;SEC("tc")同 linked lists,增加了针对 rbtree 的支持,详见。原创 2023-12-24 15:51:19 · 877 阅读 · 0 评论 -
BTF:实践指南
现在在更高版本的内核中,在该变量之前添加了其他字段,导致访问的字段的偏移量变成了 24,这会导致 BPF 程序在偏移量 8 读取的数据可能为垃圾数据。上述命令将创建一个巨大的 vmlinux.h 文件,其中包含所有内核类型,包括作为 UAPI 的一部分公开的类型、内部类型和通过 kernel-devel 可用的类型,以及一些其他地方不可用的更多内部类型。BTF 是针对 BPF 程序的类型信息进行编码文件格式,通过 BPF 程序的类型信息进行编码,为程序提供更好的内省(introspection)和可见性。原创 2023-12-24 15:46:11 · 853 阅读 · 0 评论 -
2023 年 6 个值得关注的 eBPF 趋势
eBPF(扩展伯克利数据包过滤器)在整个 2022 年的表现的可圈可点 🐝。随着 2023 年帷幕逐步拉开,对于 eBPF 我们有了更加多的期待。以下为我们认为在 2023 年需要关注的 eBPF 关键趋势:原创 2023-02-11 16:46:46 · 272 阅读 · 1 评论 -
Rust Aya 框架编写 eBPF 程序
Linux 内核 6.1 版本中有一个非常引人注意的变化:引入了对 Rust 编程语言的支持。Rust 是一种系统编程语言,Rust 通过提供非常强大的编译时保证和对内存生命周期的明确控制。在内核开发中引入 Rust 语言,将会为内核开发的早期带来更多的安全保障。eBPF 是在内核中基于事件运行用户自定义程序的技术,其验证器机制可以保障运行在内核中 eBPF 程序的安全性。Rust 与 eBPF 有着一个共同的目标:保证内核安全,只是两者侧重的维度有所不同。原创 2022-11-12 11:13:46 · 877 阅读 · 0 评论 -
【译】告别 IPVS,拥抱 Cilium/XDP? | 深入浅出 eBPF
截图不言自明,但对我们来说关键是,L4LB XDP在驱动层的大部分HTTP流量节省了处理生产流量所需的大量 CPU - 我们 90% 的流量是 HTTP 请求。在我们完全切换到 L4LB XDP 之前,Cilium 中唯一缺少功能是加权后端功能,该功能我们正在开发中:maglev:支持通过新的 cmdline 参数在服务规范中设置后端的权重。该功能开发完成后,那么就没有什么能阻止我们告别 IPVS。......原创 2022-07-19 20:52:27 · 866 阅读 · 0 评论 -
一道思考题所引起动态跟踪 ‘学案’
想想看,当我们用 kprobe 为一个内核函数注册了 probe 之后,怎样能看到对应内核函数的第一条指令被替换了呢?原创 2022-05-02 17:45:11 · 1987 阅读 · 1 评论 -
BTFGen: 让 eBPF 程序可移植发布更近一步
本文地址:https://ebpf.top/post/btfgen-one-step-closer-to-truly-portable-ebpf-programsMauricio 2022 2022/03/16eBPF 是一项广为人知的技术,已经在可观测、网络和安全领域领域得到广泛应用。Linux 操作系统提供了虚拟机,可用于安全和高效的方式运行 eBPF 程序【译者注:如果是 JIT 模式则会直接翻译成本地 CPU 指令,则不需要虚拟机】。eBPF 程序挂载在操作系统提供的钩子上,使其能够在内核中原创 2022-04-08 22:42:45 · 727 阅读 · 0 评论 -
eBPF+Ftrace 合璧剑指:no space left on device?
本文地址:https://www.ebpf.top/post/no_space_left_on_devices最近在生产环境中遇到了几次创建容器报错 ”no space left on device“ 失败的案例,但是排查过程中发现磁盘使用空间和 inode 都比较正常。在常规的排查方式都失效的情况下,有没有快速通用思路可以定位问题根源呢?本文是在单独环境中使用 eBPF + Ftrace 分析和排查问题流程的记录,考虑到该方式具有一定的通用性,特整理记录,希望能够起到抛砖引玉的作用。作者水平有限,思原创 2022-04-08 22:41:17 · 212 阅读 · 0 评论 -
Ubuntu 21.10 安装调试符号
本文地址:https://www.ebpf.top/post/ubuntu-21-10-dbgsym1. 背景Linux 内核中的调试符号包含源代码级别的信息,如函数名称、函数调用约定、以及源代码行号到指令的映射。这些信息在调试或剖析内核的时候非常有用。在本文中,我将展示如何在 Ubuntu 上获得任何内核的调试符号。通常来说,有 2 种方法可以使用调试符号:使用源码构建带有调试符号的内核源代码,通常适用于自己修改源码编译的场景,构建内核的过程依据编译选项,一般会耗费比较长的时间;使用现成原创 2022-03-17 15:26:19 · 1526 阅读 · 0 评论 -
问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
如果你只是需要快速使用工具来进行问题排查,包括但不限于函数调用栈跟踪、函数调用子函数流程、函数返回结果,那么推荐你直接使用 Brendan Gregg 封装的 perf-tools工具即可,本文尝试从手工操作 Ftrace 跟踪工具的方式展示在底层是如何通过 tracefs 实现这些能力的。如果你对某个跟踪主题感兴趣,建议直接跳转到相关的主题查看。原创 2022-03-17 08:34:07 · 582 阅读 · 0 评论 -
BumbleBee: 如丝般顺滑构建、交付和运行 eBPF 程序
BumbleBee 可以让我们专注于编写 eBPF 代码,其负责自动生成与 eBPF 程序相关的用户空间相关的代码(对应于用户空间的功能),自动将 eBPF 程序的数据作为日志、指标和直方图进行展示。原创 2022-02-14 08:48:12 · 267 阅读 · 1 评论 -
深入理解 BPF map 实现机制
在 BPF 程序中可以通过声明 `struct bpf_map_def` 结构完成创建,这其实带给我们一种错觉,感觉这和普通的 C 语言变量没有区别,然而事实真的是这样的吗? 事情远没有这么简单,读完本文以后相信你会有更大的惊喜。原创 2022-01-10 10:08:35 · 1627 阅读 · 0 评论 -
Cilium 1.11 发布,带来内核级服务网格、拓扑感知路由....
原文链接:https://isovalent.com/blog/post/2021-12-release-111作者:Cilium 母公司 Isovalent 团队译者:范彬,狄卫华,米开朗基杨注:本文已取得作者本人的翻译授权!Cilium 项目已逐渐成为万众瞩目之星,我们很自豪能够成为该项目的核心人员。几天前,我们发布了具有诸多新功能的 Cilium 1.11 版本,这是一个令人兴奋的版本。诸多新功能中也包括了万众期待的 Cilium Service Mesh 的 Beta 版本。在本篇.原创 2021-12-17 10:11:43 · 263 阅读 · 0 评论 -
百页 PPT BPF 技术全览 - 深入浅出 BPF 技术
本文地址:百页 PPT BPF 技术全览 - 深入浅出 BPF 技术 | 深入浅出 eBPFeBPF 从创建开始,短短数年(7年),至今就已经被认为是过去 50 年来操作系统最大的变更,那么eBPF 技术到底给我们带来了什么样的超能力,以至于得到如此高的评价? 本文从以下内容入手,对 eBPF 技术进行了全面的概述: eBPF 是什么? eBPF 的应用场景有哪些? eBPF 是怎么工作的? eBPF 软件开发的生态 eBPF 未来发展趋势 从 cBP.原创 2021-12-04 11:27:11 · 811 阅读 · 0 评论 -
【译】eBPF 概述:第 5 部分:跟踪用户进程
本系列导航:eBPF 概述:第 1 部分:介绍eBPF 概述:第 2 部分:机器和字节码eBPF 概述:第 3 部分:软件开发生态eBPF概述:第 4 部分:在嵌入式系统运行SeBPF概述:第 5 部分:追踪用户进程原文地址:https://www.collabora.com/news-and-blog/blog/2019/05/14/an-ebpf-overview-part-5-tracing-user-processes/首发地址:https://ebpf.top/post/ebp原创 2021-09-29 16:16:29 · 424 阅读 · 0 评论 -
【译】eBPF 概述:第 4 部分:在嵌入式系统运行
本系列导航:eBPF 概述:第 1 部分:介绍eBPF 概述:第 2 部分:机器和字节码eBPF 概述:第 3 部分:软件开发生态eBPF概述:第 4 部分:在嵌入式系统运行SeBPF概述:第 5 部分:追踪用户进程原文地址:https://www.collabora.com/news-and-blog/blog/2019/05/06/an-ebpf-overview-part-4-working-with-embedded-systems/首发地址:https://ebpf.top/p原创 2021-09-29 16:15:58 · 821 阅读 · 0 评论 -
【译】eBPF 概述:第 3 部分:软件开发生态
本系列导航:eBPF 概述:第 1 部分:介绍eBPF 概述:第 2 部分:机器和字节码eBPF 概述:第 3 部分:软件开发生态eBPF 概述:第 4 部分:在嵌入式系统运行eBPF 概述:第 5 部分:追踪用户进程原文地址:https://www.collabora.com/news-and-blog/blog/2019/04/26/an-ebpf-overview-part-3-walking-up-the-software-stack/首发地址:https://ebpf.toph原创 2021-09-29 16:13:49 · 752 阅读 · 0 评论 -
【译】eBPF 概述:第 2 部分:机器和字节码
本系列导航:eBPF 概述:第 1 部分:介绍eBPF 概述:第 2 部分:机器和字节码eBPF 概述:第 3 部分:软件开发生态eBPF概述:第 4 部分:在嵌入式系统运行SeBPF概述:第 5 部分:追踪用户进程原文地址:https://www.collabora.com/news-and-blog/blog/2019/04/15/an-ebpf-overview-part-2-machine-and-bytecode/首发地址:https://ebpf.top/post/ebpf-原创 2021-09-29 16:12:52 · 235 阅读 · 0 评论 -
【译】eBPF 概述:第 1 部分:介绍
本系列导航:eBPF 概述:第 1 部分:介绍eBPF 概述:第 2 部分:机器和字节码eBPF 概述:第 3 部分:软件开发生态eBPF概述:第 4 部分:在嵌入式系统运行eBPF概述:第 5 部分:追踪用户进程原文地址:https://www.collabora.com/news-and-blog/blog/2019/04/05/an-ebpf-overview-part-1-introduction/首发地址:https://ebpf.top/post/ebpf-overview-原创 2021-09-29 16:12:11 · 286 阅读 · 0 评论 -
BPF BTF 详细介绍
本文地址:https://www.ebpf.top/post/kernel_btf/英文文档:https://www.kernel.org/doc/html/latest/bpf/btf.html1. 介绍BTF(BPF 类型格式)是一种元数据格式,对与 BPF 程序 /map 有关的调试信息进行编码。BTF 这个名字最初是用来描述数据类型。后来,BTF 被扩展到包括已定义的子程序的函数信息和行信息。调试信息可用于 map 的更好打印、函数签名等。函数签名能够更好地实现 bpf 程序/函数的内核符号原创 2021-09-24 10:52:01 · 2590 阅读 · 0 评论 -
深入浅出 BPF TCP 拥塞算法实现原理
本文地址:https://www.ebpf.top/post/ebpf_struct_ops1. 前言eBPF 的飞轮仍然在快速转动,自从 Linux 内核 5.6 版本支持 eBPF 程序修改 TCP 拥塞算法能力,可通过在用户态修改内核中拥塞函数结构指针实现;在 5.13 版本中该功能又被进一步优化,增加了该类程序类型直接调用部分内核代码的能力,这避免了在 eBPF 程序中需要重复实现内核中使用的 TCP 拥塞算法相关的函数。这两个功能的实现,为 Linux 从宏内核向智能化的微内核提供的演进,原创 2021-09-22 19:58:49 · 477 阅读 · 0 评论 -
深入浅出 eBPF 安全项目 Tracee
原文地址: https://www.ebpf.top/post/tracee_intro/1. Tracee 介绍1.1 Tracee 介绍Tracee 是一个用 于 Linux 的运行时安全和取证工具。它使用 Linux eBPF 技术在运行时跟踪系统和应用程序,并分析收集的事件以检测可疑的行为模式。Tracee 以 Docker 镜像的形式交付,监控操作系统并根据预定义的行为模式集检测可疑行为。完整文档参见:https://aquasecurity.github.io/tracee/dev/。原创 2021-09-11 20:52:52 · 1407 阅读 · 0 评论 -
【BPF入门系列-12】【译】eBPF 和 Go 经验初探
原文地址:https://networkop.co.uk/post/2021-03-ebpf-intro/本站相关文档:使用 Go 语言管理和分发 ebpf 程序1. 前言eBPF 的生态欣欣向荣,无论是eBPF 本身及其各种应用(包括XDP) 方面都有大量的学习资源。但当涉及到选择库和工具来与 eBPF 进行交互时,会让人有所困惑。在选择时,你必须在基于 Python 的BCC框架、基于 C 的libbpf和一系列基于 Go 的Dropbox、Cilium、Aqua和Cali...原创 2021-09-01 14:54:28 · 841 阅读 · 0 评论 -
使用 eBPF 技术跟踪 Netfilter 数据流
1. 网络层数据流向与 Netfilter 体系图 1-1 为网络层内核收发核心流程图,在函数流程图中我们可以看到 Netfliter 在其中的位置(图中深色底纹圆角矩形)。图中对应的 hook 点有 5 个,每个hook 点中保存一组按照优先级排序的函数列表: NF_IP_PREROUTING:接收到的包进入协议栈后立即触发此 hook 中注册的对应函数列表,在进行任何路由判断 (将包发往哪里)之前; NF_IP_LOCAL_IN:接收到的包经过路由判断,如果目的是本机,将触发此 ho原创 2021-08-26 11:12:21 · 521 阅读 · 0 评论 -
来来来,让我看看你究竟在干什么?
原文作者:DavidDi 原文链接:https://www.ebpf.top/post/system_debug_stack/ 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。目录1. 系统的线程栈跟踪(内核) 1.1 sysrq 是什么? 1.2 sysrq 打印系统线程信息 1.3 底层实现原理 (可跳过) 2. 进程线程/协程栈跟踪 2.1 使用 `pstack`原创 2021-07-21 15:53:12 · 538 阅读 · 0 评论 -
【BPF网络篇系列-2】容器网络延时之 ipvs 定时器篇
1. 前言 2. 网络抖动问题 3. 问题分析 3.1 网络数据包内核中的处理流程 3.2 CPU 软中断处理排查 3.3 ipvs estimation_timer 定时器 4. 问题解决 4.1 问题解决方案 4.2 kpatch livepatch 4.3 使用 kpatch 注意事项 5. 总结原文链接地址:https://www.ebpf.top/post/ebpf_network_kpath_ipvs/1. 前言趣头条的容器化已经开展了一年有余,累.原创 2020-12-31 14:32:12 · 463 阅读 · 0 评论 -
kpatch 热修 ipvs estimation_timer 内核延时问题
1. kpatch 是什么?livepatch 实时或动态内核修补允许为正在运行的内核提供功能增强,无需重新启动系统,这对于某些在线系统修复安全漏洞非常有帮助。Kpatch 是给 Linux 内核 livepatch 的工具,由 Redhat 公司出品。最早出现的打热补丁工具是 Ksplice。但是 Ksplice 被 Oracle 收购后,一些发行版生产商就不得不开发自己的热补丁工具,分别是 Redhat 的 Kpatch 和 Suse 的 KGraft。同时,在这两家厂商的推进下,kernel 4.原创 2020-12-03 21:00:09 · 672 阅读 · 0 评论 -
【BPF入门系列-4】如何在 BPF 程序中正确地按照 PID 过滤?
1. 前言在 bpf 的实现中我们经常在内核 helper 函数 bpf_get_current_pid_tgid() 来进行用户空间进程 pid 进行过滤,那么到底如何写呢? 在 BCC 项目中有不少程序直接使用 bpf_get_current_pid_tgid() 直接与用户空间传入的 pid 对比,也有使用 bpf_get_current_pid_tgid() >> 32 进行过滤的,那么使用者或者开发者到底应该使用哪种方式,这篇文章可以帮你彻底解决这类的疑惑。2. Linux 进程与原创 2020-12-02 10:12:45 · 1521 阅读 · 0 评论 -
【BPF入门系列-3】BPF 环境搭建
1. 内核版本选择 补丁 Prepatch: Prepatch 或 “RC” 内核是主线内核的预发布版本,主要针对其他内核开发者和 Linux 爱好者。它们必须从源码中编译,并且通常包含新的功能,这些功能必须在稳定发布之前进行测试。Prepatch 内核由 Linus Torvalds 维护和发布。 主线版 Mainline: 主线版本由 Linus Torvalds 维护。它是介绍所有新功能的版本,包含了所有令人兴奋的新开发的功能。新的主线内核每 2-3 个月发布一次。 稳定版原创 2020-12-01 23:30:55 · 2916 阅读 · 2 评论 -
【BPF入门系列-2】BPF 学习路径总结
1. 为什么要学习 BPF可以先从ebpf.io网站获取一个简单的了解,首页内容翻译如下。Linux 内核一直是实现监控/可观察性、网络和安全性的理想场所。不幸的是,这往往是不切实际的,因为它需要改变内核源代码或加载内核模块,并导致层层抽象叠加。eBPF 是一项革命性的技术,它可以在 Linux 内核中运行沙盒程序,而无需改变内核源代码或加载内核模块。通过使Linux内核可编程,基础架构软件可以利用现有的层,使其更加智能,功能更加丰富,而不会继续给系统增加额外的复杂度,也不会影响执行效率和安..原创 2020-12-01 23:27:00 · 2008 阅读 · 2 评论 -
【BPF入门系列-1】eBPF 技术简介
eBPF 技术简介由范老师和我一起翻译的图书 《Linux内核观测技术BPF》 已经在 JD 上有现货,欢迎感兴趣 BPF 技术的同学选购。链接地址https://item.jd.com/72110825905.html“eBPF 是我见过的 Linux 中最神奇的技术,没有之一,已成为 Linux 内核中顶级子模块,从 tcpdump 中用作网络包过滤的经典 cbpf,到成为通用 Linux 内核技术的 eBPF,已经完成华丽蜕变,为应用与神奇的内核打造了一座桥梁,在系统跟踪、观测、性能调优.原创 2020-12-01 23:18:49 · 2216 阅读 · 0 评论