Fork me on GitHub

随笔分类 -  BPF

摘要:BPF 是 Linux 内核中基于寄存器的虚拟机,可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同,BPF 程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF 程序允许调用的内核函数也受到限制,以确保最大的安全性以防止非法的访问。 尽管 BPF 为编写事件驱动的内核 阅读全文
posted @ 2024-03-26 10:35 yooooooo 阅读(357) 评论(0) 推荐(1) 编辑
摘要:1. 介绍 BTF(BPF Type Format)是内嵌在BPF(Berkeley Packet Filter)程序中的数据结构描述信息。BPF原本是用于数据包过滤的编程语言,但随着eBPF(extended BPF)的发展,它的用途已经扩展到多种内核子系统中,包括性能监测、网络安全和配置管理等。 阅读全文
posted @ 2024-03-07 23:39 yooooooo 阅读(348) 评论(0) 推荐(0) 编辑
摘要:以bitehist为例: 使用BPF之前: 1、在内核中:开启磁盘IO事件的插桩观测。 2、在内核中,针对每个事件:向perf缓冲区写入一条记录。如果使用了跟踪点技术(推荐方式),记录中会包含关于磁盘IO的几个元数据字段。 3、在用户空间:周期性地将所有事件的缓冲区内容复制到用户空间4。在用户空间: 阅读全文
posted @ 2024-03-07 15:34 yooooooo 阅读(31) 评论(0) 推荐(0) 编辑
摘要:1、安装bpftool工具 看起来,在不同的linux发行版里,bpftool在不同的软件包里,ubuntu 22上,bpftool是linux-tools-generic的一部分,而树莓派里bpftool是一个单独的软件包。 在ubuntu上: sudo apt install linux-too 阅读全文
posted @ 2024-01-01 21:12 yooooooo 阅读(2266) 评论(0) 推荐(0) 编辑
摘要:1. 前言 在本系列的第 1 部分和第 2 部分,我们介绍了 eBPF 虚拟机内部工作原理,在第 3 部分我们研究了基于底层虚拟机机制之上开发和使用 eBPF 程序的主流方式。 在这一部分中,我们将从另外一个视角来分析项目,尝试解决嵌入式 Linux 系统所面临的一些独特的问题:如需要非常小的自定义 阅读全文
posted @ 2023-11-29 21:49 yooooooo 阅读(158) 评论(0) 推荐(0) 编辑
摘要:1. 前言 在本系列的第 1 部分和第 2 部分中,我们对 eBPF 虚拟机进行了简洁的深入研究。阅读上述部分并不是理解第 3 部分的必修课,尽管很好地掌握了低级别的基础知识确实有助于更好地理解高级别的工具。为了理解这些工具是如何工作的,我们先定义一下 eBPF 程序的高层次组件: 后端:这是在内核 阅读全文
posted @ 2023-11-26 23:26 yooooooo 阅读(105) 评论(0) 推荐(0) 编辑
摘要:1. 前言 我们在第 1 篇文章中介绍了 eBPF 虚拟机,包括其有意的设计限制以及如何从用户空间进程中进行交互。如果你还没有读过这篇文章,建议你在继续之前读一下,因为没有适当的介绍,直接开始接触机器和字节码的细节是比较困难的。如果有疑问,请看第 1 部分开头的流程图。 本系列的第 2 部分对第 1 阅读全文
posted @ 2023-11-23 10:28 yooooooo 阅读(96) 评论(0) 推荐(0) 编辑
摘要:1. 前言 有兴趣了解更多关于 eBPF 技术的底层细节?那么请继续移步,我们将深入研究 eBPF 的底层细节,从其虚拟机机制和工具,到在远程资源受限的嵌入式设备上运行跟踪。 注意:本系列博客文章将集中在 eBPF 技术,因此对于我们来讲,文中 BPF 和 eBPF 等同,可相互使用。BPF 名字/ 阅读全文
posted @ 2023-11-20 23:43 yooooooo 阅读(94) 评论(0) 推荐(1) 编辑
摘要:## 1 Overview ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可以运行,不需要外部 kernel 模块,不需要 LLVM,不需要 python。 ply 由瑞 阅读全文
posted @ 2023-05-29 17:24 yooooooo 阅读(181) 评论(0) 推荐(0) 编辑
摘要:一、bpftrace简介 bpftrace 是基于ebpf内核vm扩展出来的trace工具。 bpftrace 是 Linux 高级追踪工具和语言。该工具基于 eBPF 和 BBC 实现了通过探针机制采集内核和程序运行的信息,然后用图表等方式将信息展示出来,帮助开发者找到隐藏较深的 Bug、安全问题 阅读全文
posted @ 2022-11-20 17:14 yooooooo 阅读(991) 评论(0) 推荐(0) 编辑
摘要:biolatency通过追踪块设备IO,记录IO延迟分布,并以直方图显示。biolatency通过动态追踪blk_族函数并记录函数的变化。 biolatency需要BPF支持,因此需要root权限。 biolatency [-h] [-F] [-T] [-Q] [-m] [-D] [interval 阅读全文
posted @ 2022-11-15 22:58 yooooooo 阅读(364) 评论(0) 推荐(0) 编辑
摘要:基本结构 #导入库 from bcc import BPF #使用BPF()执行bpf代码 BPF(text=""" #C语言代码段 """ ) #对bpf的处理代码 C语言代码编写 不需要写main函数,目前知道可以写两种函数,以“kprobe__”开头的函数和自定义函数。bpf函数至少要包含一个 阅读全文
posted @ 2022-10-06 17:54 yooooooo 阅读(595) 评论(0) 推荐(0) 编辑
摘要:bcc代码——Hello,world 1、简单监控clone()系统调用,将相关的信息打印出来 #!/usr/bin/python from bcc import BPF BPF(text=""" int kprobe__sys_clone(void *ctx){ bpf_trace_printk( 阅读全文
posted @ 2022-10-06 17:24 yooooooo 阅读(104) 评论(0) 推荐(0) 编辑
摘要:BPF,及伯克利包过滤器Berkeley Packet Filter,最初构想提出于 1992 年,其目的是为了提供一种过滤包的方法,并且要避免从内核空间到用户空间的无用的数据包复制行为。它最初是由从用户空间注入到内核的一个简单的字节码构成,它在那个位置利用一个校验器进行检查 —— 以避免内核崩溃或 阅读全文
posted @ 2022-05-02 09:24 yooooooo 阅读(654) 评论(0) 推荐(0) 编辑
摘要:在排查linux性能问题的时候我们有时候会发现 整体 CPU使用率 很高,但是绝大多是是在 sys 上的,usr上的CPU时间很少,这种就需要看看是内核空间在干什么了, 是系统在 系统调用太耗时还是其他原因倒是的sys使用率上升。 如果查看 系统调用时间 和 系统调用次数呢?bcc为 我们提供了这个 阅读全文
posted @ 2022-05-01 16:26 yooooooo 阅读(203) 评论(0) 推荐(0) 编辑
摘要:在实际工作中,偶尔会遇到系统的CPU使用率和系统平均负载很高,但却找不到高CPU的应用; 产生这个问题的原因:进程有可能在不断的崩溃、重启 通过uptime发现系统负载很高,但是通过top,mpstat,pidstat,perf等工具很难发现是什么进程导致了系统负载和CPU使用率很高; 注:通过上面 阅读全文
posted @ 2022-05-01 16:23 yooooooo 阅读(751) 评论(0) 推荐(0) 编辑
摘要:BCC(BPF编译器集合 )是用于创建足智多谋内核跟踪和操作程序一套功能强大的适当的工具和示例文件。 它采用扩展BPF( Berkeley包过滤器 ),最初被称为eBPF这是在Linux的3.15的新功能之一。 BCC / BPF - 用于Linux性能监视的动态跟踪工具 实际上,大多数由BCC使用 阅读全文
posted @ 2022-05-01 11:24 yooooooo 阅读(867) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示