- 博客(50)
- 资源 (8)
- 收藏
- 关注
原创 BPF 调度器 sched_ext 实现机制、调度流程及样例
本篇博文会重点介绍 sched_ext 的实现原理,sched_ext 是一个由 Meta 和 Google 共同联合推出的可扩展调度器类,称之为 ext_sched_class 或 sched_ext,这种机制允许用户通过定义的 BPF 程序来实现调度类实现针对特定工作负载或场景的调度器策略优化。
2024-09-16 11:46:58
1535
原创 Linus 强势拍板 6.11 合入: BPF 赋能调度器终成正果
在 2004 年,Linux 社区的 Con Kolivas 提出了可插拔式调度器的想法,旨在让内核中存在多个调度器,用户可在引导时选择。然而,该想法遭到了强烈反对,认为会导致调度器的碎片化。在 2021 年,Facebook 的 Roman Gushchin 提交了一组 BPF 与调度器相关的 patch,试图将 BPF 的可编程能力应用于调度器,但并未引起太大的关注。直到 2022 年,Tejun Heo 与其他开发者提交了一个由 30 个小 patch 组成的提交,重启了 BPF 进攻调度器的战役,将
2024-09-16 11:38:43
1329
原创 BPF 跟踪机制之原始跟踪点 rawtracepoint 介绍、使用和样例
本文就 Linux Trace 跟踪过程中的主要 Hook 点给出了简单介绍,然后重点介绍了 rawtracepoint 类型出现的背景,性能测试说明,并通过 libbpf 和 bpftrace 分别基于 task_rename 给出了完整实现,介绍过程结合 tracepoint 跟踪点给出对比说明。
2024-03-11 23:47:53
1174
1
原创 一条命令本地 CPU 环境快速上手 Google 开源大模型 Gemma 【保姆级教程】
Ollama 的目标是推动大型语言模型的发展,提升模型的性能,同时也为开发者提供了一个分享和学习的社区。在这个社区中,开发者可以分享他们的模型,学习他人的经验,共同推动大型语言模型的发展。使用注册后的账号登录进入到整体主页面,这里的主页面和 ChatGPT 的使用页面类似,当前我们还未下载模型,需要通过设置下载支持的模型,支持 Llama 2、Mistral 等多种开源模型。只需要简单的一行命令,我们可以快速在本地运行 Google Gemma 大模型,还犹豫什么,快速体验一下吧。
2024-03-11 23:40:15
1566
1
原创 BPF 管理器 bpfman 简介
程序状态查看类 CRD (BpfProgram),用于管理加载到内核的 eBPF 程序的运行状态;但是细心的读者有可能已经注意到,上述流程只是完成了 eBPF 字节码在内核中的加载(bpfman 充当了 eBPF 加载器),但是运行时暴露的数据和指标还未完成采集,因此还需要单独部署一个用户空间程序完成数据读取(上述图中为 map 数据结构)。与内核空间对应的 eBPF 用户空间程序的部署和数据读取,用户空间程序通常用于读取运行时数据或加载配置,需要单独部署用户空间程序(通过 CSI 方式挂载并读取数据)。
2024-02-01 21:12:55
798
原创 2024 年 eBPF 和网络趋势预测
在将来作者预测会有更多的 eBPF 应用在移动设备上的使用案例,不仅限于安卓设备。观测集群中发生的一切将会带来巨大的数据量,这将会显著增加可观测性的成本开销,特别是涉及数百个 Kubernetes 集群和数十万个 Pod 场景中。有趣的是,另一种流行的云原生技术 Wasm 也有类似的说法,Wasm 提供了一个能够在 Web 浏览器中运行 C/C++、C# 和 Rust 程序的抽象。的目标是确保 eBPF 程序安全运行,并防止危险行为,但随着 eBPF技术广泛的应用,可能会出现某些形式的漏洞被利用。
2024-01-27 23:29:44
937
原创 libbpf-tips
在选择 map 类型时,如果与同一 CPU 相关联并发生多个事件,则可以使用 per-CPU 数组来跟踪时间戳,这比使用 hash map 更加简单和高效。社区尝试了其他解决方案,但最终,预分配所有 map 元素是最简单的解决方案,并且不影响用户空间的行为。不仅可以使用全局变量来自定义 BPF 程序逻辑,你还可以使用它们来替代 map,这使程序更加简单和高效。然而,当你在条件语句中使用这样的表达式时,,会由于分支被优化掉在某些内核版本中引入 bug。相反,我会针对程序的某些细节部分提供对应的技巧。
2024-01-15 18:59:30
883
原创 使用 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
1006
原创 BPF 程序与信号交互大揭秘
这与抢占式用户空间是正交的,在抢占式用户空间中,调度器抢占运行在用户模式的进程。如果有致命信号设置,它们会向调用方返回错误,将系统调用栈展开直到返回用户空间的那一点,然后程序会像我们之前看到的那样终止。例如,在自旋锁上没有在正确的时机禁用抢占可能导致另一个进程无限期地在抢占的进程的锁上自旋。作为 eBPF 的安全机制时的一些陷阱,尽管大多数情况下可靠地使用,但我们的确需要对它们运行的环境有深刻的理解。然而,不幸的是,正如后面的部分所示,这也是不可靠的。此外,我们还将确定和观察在处理这些信号背后我的影响。
2024-01-15 14:36:11
1053
原创 一文全面了解 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
1981
原创 Cisco 将收购 Cilium 母公司 Isovalent,预计 2024 年第 3 季度完成
2023 年 12 月 21 日,Isovalent 公司 CTO & 联合创始人 Thomas Graf 和 Cisco 安全业务集团高级副总裁兼总经理 Tom Gillis 分别在各自公司网站公布了思科打算收购 Isovalent 公司的计划,双方都没有公布收购的价格。当一家大公司收购一家建立在像这样的流行开源项目上的初创公司时,事情可能并不是那么简单,这可能会在社区和依赖该软件的大公司面发生方向性的选择。CIsco 意在通过收购,意在增强其在多云网络和安全的能力。
2023-12-24 15:54:34
1073
原创 什么等等? 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
935
原创 eBPF 进阶: 内核新特性进展一览
程序 BTF 中用户定义的 BPF 类型对象, 这使得 BPF 程序可以分配自己的对象,构建自己的对象层次结构,并使用 BPF 运行时提供的基本构建块灵活地构建自己的数据结构。int data;int ret;SEC("tc")同 linked lists,增加了针对 rbtree 的支持,详见。
2023-12-24 15:51:19
1000
原创 BPF 通用迭代器机制
通常,要装载到内核的 BPF 程序是用 C 语言编写的,但是这些程序运行的环境与 C 环境有明显的不同。BPF 的迭代器机制的新增突出了正在增加的功能,以及 BPF 给程序员带来的限制。它还可以接受任意数量的其他参数。我们建立了一个框架来实现所有类型的迭代器(例如 cgroup,task,file 等迭代器),但是这个补丁集只实现了数字迭代器,用于实现符合人体工程学的 bpf_for() 样的结构。在程序加载时,BPF 验证器进行的诸多检查之一是为了确保程序在合理的时间内终止,这个过程需要模拟程序的执行。
2023-12-24 15:49:25
990
原创 BTF:实践指南
现在在更高版本的内核中,在该变量之前添加了其他字段,导致访问的字段的偏移量变成了 24,这会导致 BPF 程序在偏移量 8 读取的数据可能为垃圾数据。上述命令将创建一个巨大的 vmlinux.h 文件,其中包含所有内核类型,包括作为 UAPI 的一部分公开的类型、内部类型和通过 kernel-devel 可用的类型,以及一些其他地方不可用的更多内部类型。BTF 是针对 BPF 程序的类型信息进行编码文件格式,通过 BPF 程序的类型信息进行编码,为程序提供更好的内省(introspection)和可见性。
2023-12-24 15:46:11
973
原创 2023 年 6 个值得关注的 eBPF 趋势
eBPF(扩展伯克利数据包过滤器)在整个 2022 年的表现的可圈可点 🐝。随着 2023 年帷幕逐步拉开,对于 eBPF 我们有了更加多的期待。以下为我们认为在 2023 年需要关注的 eBPF 关键趋势:
2023-02-11 16:46:46
381
原创 Rust Aya 框架编写 eBPF 程序
Linux 内核 6.1 版本中有一个非常引人注意的变化:引入了对 Rust 编程语言的支持。Rust 是一种系统编程语言,Rust 通过提供非常强大的编译时保证和对内存生命周期的明确控制。在内核开发中引入 Rust 语言,将会为内核开发的早期带来更多的安全保障。eBPF 是在内核中基于事件运行用户自定义程序的技术,其验证器机制可以保障运行在内核中 eBPF 程序的安全性。Rust 与 eBPF 有着一个共同的目标:保证内核安全,只是两者侧重的维度有所不同。
2022-11-12 11:13:46
1044
原创 【译】告别 IPVS,拥抱 Cilium/XDP? | 深入浅出 eBPF
截图不言自明,但对我们来说关键是,L4LB XDP在驱动层的大部分HTTP流量节省了处理生产流量所需的大量 CPU - 我们 90% 的流量是 HTTP 请求。在我们完全切换到 L4LB XDP 之前,Cilium 中唯一缺少功能是加权后端功能,该功能我们正在开发中:maglev:支持通过新的 cmdline 参数在服务规范中设置后端的权重。该功能开发完成后,那么就没有什么能阻止我们告别 IPVS。......
2022-07-19 20:52:27
1026
原创 一道思考题所引起动态跟踪 ‘学案’
想想看,当我们用 kprobe 为一个内核函数注册了 probe 之后,怎样能看到对应内核函数的第一条指令被替换了呢?
2022-05-02 17:45:11
2501
2
原创 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
801
原创 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
247
原创 Ubuntu 21.10 安装调试符号
本文地址:https://www.ebpf.top/post/ubuntu-21-10-dbgsym1. 背景Linux 内核中的调试符号包含源代码级别的信息,如函数名称、函数调用约定、以及源代码行号到指令的映射。这些信息在调试或剖析内核的时候非常有用。在本文中,我将展示如何在 Ubuntu 上获得任何内核的调试符号。通常来说,有 2 种方法可以使用调试符号:使用源码构建带有调试符号的内核源代码,通常适用于自己修改源码编译的场景,构建内核的过程依据编译选项,一般会耗费比较长的时间;使用现成
2022-03-17 15:26:19
1727
原创 问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
如果你只是需要快速使用工具来进行问题排查,包括但不限于函数调用栈跟踪、函数调用子函数流程、函数返回结果,那么推荐你直接使用 Brendan Gregg 封装的 perf-tools工具即可,本文尝试从手工操作 Ftrace 跟踪工具的方式展示在底层是如何通过 tracefs 实现这些能力的。如果你对某个跟踪主题感兴趣,建议直接跳转到相关的主题查看。
2022-03-17 08:34:07
653
原创 BumbleBee: 如丝般顺滑构建、交付和运行 eBPF 程序
BumbleBee 可以让我们专注于编写 eBPF 代码,其负责自动生成与 eBPF 程序相关的用户空间相关的代码(对应于用户空间的功能),自动将 eBPF 程序的数据作为日志、指标和直方图进行展示。
2022-02-14 08:48:12
339
1
原创 深入理解 BPF map 实现机制
在 BPF 程序中可以通过声明 `struct bpf_map_def` 结构完成创建,这其实带给我们一种错觉,感觉这和普通的 C 语言变量没有区别,然而事实真的是这样的吗? 事情远没有这么简单,读完本文以后相信你会有更大的惊喜。
2022-01-10 10:08:35
1935
原创 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
298
原创 百页 PPT BPF 技术全览 - 深入浅出 BPF 技术
本文地址:百页 PPT BPF 技术全览 - 深入浅出 BPF 技术 | 深入浅出 eBPFeBPF 从创建开始,短短数年(7年),至今就已经被认为是过去 50 年来操作系统最大的变更,那么eBPF 技术到底给我们带来了什么样的超能力,以至于得到如此高的评价? 本文从以下内容入手,对 eBPF 技术进行了全面的概述: eBPF 是什么? eBPF 的应用场景有哪些? eBPF 是怎么工作的? eBPF 软件开发的生态 eBPF 未来发展趋势 从 cBP.
2021-12-04 11:27:11
1484
原创 【译】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
533
原创 【译】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
944
原创 【译】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
801
原创 【译】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
283
原创 【译】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
335
原创 VirtualBox VM 空间瘦身记(vmdk)
本文地址:https://www.ebpf.top/post/shrink_vbox_vmdk_size在使用 VirtualBox( VMDK 模式)管理虚拟机的时候,我们经常会遇到一些编译安装场景(比如编译 Linux 内核),会导致磁盘空间急剧膨胀,但是在编译完成后即使我们删除了相关的文件,在 VM 虚拟机占用主机的空间却并没有减少,这时候为了腾出磁盘空间或者更方便与他人分享,我们需要给 VM 的磁盘进行瘦身操作。1.1 虚拟磁盘格式介绍VirtualBox 主要支持下列虚拟磁盘格式为 VMDK
2021-09-28 18:01:08
1593
原创 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
3124
原创 深入浅出 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
570
原创 VSCode 翻译插件一览表
1. Google Translate首推的还是 Google 翻译,插件为 Google Translate,安装如下图:扩展安装完成后,需要设置 googleTranslateExt.languages 变量,常用设置的值如下:名称ISO-639-1 编码Chinese (Simplified)zh-CN (BCP-47)Chinese (Traditional)zh-TW (BCP-47)Englishen完整的编码格式可以参考 这里。Googl
2021-09-13 20:55:52
24095
2
原创 “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
“XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案1. 打开 AnyWhere 选项MacOS 早期版本只要打开 System Preferences -> Security & Privacy 并勾选 AnyWhere 就可以了。如果新的版本 AnyWhere 没有出现,则需要执行以下命令$ sudo spctl --master-disable命令执行完成,一般都可以看到 A
2021-09-13 20:50:56
985
原创 Typora 标题的自动编号
1. 介绍工欲善其事必先利其器,最近虽然重度使用 Typora 工具,但是突然发现很多功能还未能够实现自动化,比如标题自动编号的功能。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJ9MqyXt-1631537212638)(https://www.ebpf.top/imgs/typora_cnt_autonumber.png)]我们期望在输入标题的时候能够自动生成 1. 1.1 1.1.1 这样的序号用于展示,方便协作。实际上在 Typora 中可以通过添加样式的
2021-09-13 20:47:25
239
原创 深入浅出 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
1574
原创 【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
954
Algorithms on Strings, Trees and Sequences pdf
2013-05-06
Algorithms on Strings, Trees and Sequences
2013-05-06
Backup & Recovery: Inexpensive Backup Solutions for Open Systems
2013-04-22
中国移动-NGBOSS-2009年技术规范V2.0
2011-03-28
The.ACE.Programmers.Guide.eBook-LiB.chm
2008-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人