
Android eBPF Book
文章平均质量分 84
从0到1记录学习ebpf的过程......
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
高桐@BILL
校园到职场,做过室内设计;WEB前后端,APP,嵌入式,LinuxAndroid,ChromiumOS,YunOS,智舱OS等开发。
行业遍及互联网,手机,IOT,汽车。
合作品牌如华为,中兴,OV,小米,三星,谷歌,联想,诺基亚,魅族,上汽,大众,腾讯,百度,网易,LG、HTC,沃达丰,AT&T,中移动,中国电信。
职业规划为操作系统方向,涉及不同框架、方案架构设计开发,可维可测,全维度的工程化;
目前主要涉及Android产品从App、FWK、HAL、Kernel、QNX全链路的垂直工程化,以及跨域产/研/测/项目/互联网产品的横向工程化;
展开
-
6.16 CO-RE(Compile Once – Run Everywhere)使用手册(二,处理内核改动和功能检测)
BPF_CORE_READ()宏系列是BPF CO-RE的核心,但在使用BPF CO-RE构建实用BPF应用程序时,还有更多内容需要考虑。BPF应用程序必须处理的一个非常常见的问题是执行功能检测的需要。即检测特定主机内核是否支持某些新的可选功能,BPF应用程序可以利用这些功能来获取更多信息或提高效率。然而,如果内核不支持这些功能,BPF应用程序宁愿回退到支持旧内核的代码,而不是直接失败。BPF CO-RE提供了一系列不同的机制来满足这些需求。原创 2024-06-12 22:52:16 · 286 阅读 · 0 评论 -
6.15 CO-RE(Compile Once – Run Everywhere)使用手册(一,读取内核数据)
到目前为止,最常见的BPF CO-RE操作是从某个内核结构中读取字段的值。libbpf提供了一系列辅助函数,使得读取字段变得简单且CO-RE可重定位。CO-RE可重定位意味着,无论结构的实际内存布局如何(这可能会根据实际的内核版本和使用的内核配置而变化),BPF程序都将被调整为从结构的起始位置开始,以正确的实际偏移量读取字段。原创 2024-06-12 22:40:28 · 301 阅读 · 0 评论 -
6.14 CO-RE(Compile Once – Run Everywhere)的工作原理
首先我们来看下BPF应用程序必须处理的典型场景,以及如何使用BPF CO-RE解决它们。正如接下来要遇到的,一些可移植性问题(例如,兼容的结构布局差异)被处理得相当透明和自然,而其他问题则被更明确地处理,例如,通过if/else条件语句(与BCC程序中的编译时#ifdef/#else结构相对)和BPF CO-RE提供的额外机制。原创 2024-06-05 22:05:03 · 272 阅读 · 0 评论 -
6.13 CO-RE(Compile Once – Run Everywhere)简介
BPF CO-RE 即Compile Once – Run Everywhere,编译一次——到处运行。BPF CO-RE是为了解决BPF的可移植性而存在,也就是说编写一个BPF程序,该程序能够成功编译、通过内核验证,并且能够在不同的内核版本上正确运行,而无需为每个特定的内核重新编译。原创 2024-06-05 22:04:57 · 371 阅读 · 0 评论 -
6.12 Libbpf-bootstrap(三,APP)
既然我们已经了解了最小应用以及Makefile中的编译方式,接下来我们将通过bootstrap应用程序展示的一些额外的BPF特性。在现代BPF Linux环境中,bootstrap是我编写可用于生产环境的BPF应用程序的方式。它依赖于BPF CO-RE(阅读原因请点击这里),并且需要Linux内核以CONFIG_DEBUG_INFO_BTF=y配置构建(详见此处)。原创 2024-06-01 17:09:22 · 317 阅读 · 0 评论 -
6.11 Libbpf-bootstrap(二,Minimal)
minimal是一个很好的入门示例。你可以将其视为一个简单的POC,用于尝试BPF功能。它不使用BPF CO-RE,因此你可以使用较旧的内核,并且只需包含系统内核头文件即可获取内核类型定义。这不是构建生产就绪应用程序和工具的最佳方法,但对于本地实验来说已经足够了。原创 2024-06-01 16:46:24 · 202 阅读 · 0 评论 -
6.10 Libbpf-bootstrap(一,简介)
在看完前面的介绍,是不是感觉看了也就看了。但是,如果想要像BCC那样使用libbpf编写BPF程序,该怎么开始呢?那么这就需要libbpf-bootstrap了。libbpf-bootstrap是官方推荐的一个范式,就像我们写PPT的模版。简单来说可以简化我们的BPF开发流程,它可以帮助我们快速开发编写自己的BPF程序。这也就为什么把这个项目叫做bootstrap了。就像你需要使用一台电脑环境写个贪吃蛇游戏,那么你不需要在去买显卡,CPU,主板去组装一台电脑;而是只需要按下电源键即可。通过使用。原创 2024-05-29 23:04:33 · 1242 阅读 · 0 评论 -
6.9 LIBBPF API(八,bpf_endian.h 定义)
6.9 LIBBPF API(八,bpf_endian.h 定义)原创 2024-05-29 22:23:00 · 478 阅读 · 0 评论 -
6.8 LIBBPF API(七,bpf_core_read.h 函数,定义,枚举)
bpf_core_read.h 函数,定义,枚举原创 2024-05-28 22:45:25 · 320 阅读 · 0 评论 -
6.7 LIBBPF API(六,bpf_tracing.h 定义)
bpf_tracing.h 函数列表原创 2024-05-28 22:22:13 · 344 阅读 · 0 评论 -
6.6 LIBBPF API(五,btf.h 函数列表,定义,枚举)
btf.h.h 函数列表,定义,枚举原创 2024-05-26 23:16:20 · 121 阅读 · 0 评论 -
6.4 LIBBPF API(三,libbpf.h 定义与枚举)
我们继续看下libbpf.h中的定义和枚举原创 2024-05-22 21:38:40 · 98 阅读 · 0 评论 -
6.5 LIBBPF API(四,bpf.h函数列表与定义)
bpf.h函数列表原创 2024-05-22 21:38:27 · 269 阅读 · 0 评论 -
6.2 LIBBPF API(一,异常处理)
如果函数直接返回错误代码,它会使用0来表示成功,并使用负的错误代码来表示错误的原因。在这种情况下,应直接从返回值中检查错误代码,无需检查errno。如果函数返回一个指针,它会返回NULL来表示存在错误。在这种情况下,应检查errno来获取错误代码。当使用“libbpf 1.0模式”中的libbpf时,API函数可以通过两种方式返回错误。/* 请注意下面EINVAL和E2BIG的错误代码前没有负号。/* 相应地处理错误 */处理E2BIG错误 */处理EINVAL错误。原创 2024-04-11 22:43:21 · 2628 阅读 · 0 评论 -
5.120 BCC工具之zfsslower.py解读
zfsslower 显示慢于阈值的 ZFS 读取、写入、打开和 fsyncs 操作。原创 2024-04-11 22:42:52 · 2494 阅读 · 0 评论 -
5.119 BCC工具之zfsdist.py解读
ZFS 是一种高级的文件系统,设计用于存储大量数据并提供强大的数据完整性保证。zfsdist用于追踪 ZFS(Zettabyte File System)的读取、写入、打开和同步操作,并将其延迟以 2 的幂次直方图的形式进行汇总。原创 2024-04-10 08:09:19 · 2467 阅读 · 0 评论 -
5.118 BCC工具之xfsslower.py解读
xfsslower显示了XFS的读取、写入、打开和fsync操作,这些操作慢于一个阈值。原创 2024-04-10 08:08:48 · 530 阅读 · 0 评论 -
5.117 BCC工具之xfsdist.py解读
xfsdist 追踪 XFS 的读取、写入、打开和 fsyncs 操作,并将其延迟以 2 的幂次直方图的形式进行总结。原创 2024-04-09 07:47:17 · 308 阅读 · 0 评论 -
5.116 BCC工具之vfsstat.py解读
这追踪了一些常见的VFS调用,并每秒打印摘要。原创 2024-04-09 07:46:57 · 303 阅读 · 0 评论 -
5.115 BCC工具之vfscount.py解读
这通过追踪所有以“vfs_”开头的内核函数,计算了在此期间发生的VFS调用次数。默认情况下,时间为99999999秒。原创 2024-04-08 08:42:57 · 504 阅读 · 0 评论 -
5.114 BCC工具之nfsdist.py解读
nfsdist 追踪 NFS 读取、写入、打开和 getattr,并将其延迟概括为 2 的幂次方直方图。原创 2024-04-08 08:42:37 · 508 阅读 · 0 评论 -
5.113 BCC工具之nfsslower.py解读
NFS是一种分布式文件系统协议,允许客户端通过网络访问服务器上的文件。然而,由于网络延迟、服务器负载等原因,NFS操作可能会变得缓慢,从而影响系统性能。nfsslower显示慢于阈值的 NFS 读取、写入、打开和 getattr 操作。这有助于我们发现导致NFS性能下降的慢操作,并进一步分析其原因.该工具还可以追踪commit操作,这是NFS特有的,可能会非常慢。警告:这会对这些NFS操作(包括从文件系统缓存中的读取和写入)添加低开销的检测。这种读取和写入可能会非常频繁(取决于工作负载;原创 2024-04-06 10:55:00 · 434 阅读 · 0 评论 -
5.112 BCC工具之ext4slower.py解读
ext4slower可以显示慢于阈值的ext4读取、写入、打开和fsync操作。原创 2024-04-06 10:54:46 · 300 阅读 · 0 评论 -
5.111 BCC工具之ext4dist.py解读
ext4dist跟踪ext4的读取、写入、打开和fsync操作,并将其延迟总结为2的幂次方直方图。原创 2024-04-05 08:30:20 · 324 阅读 · 0 评论 -
5.110 BCC工具之btrfsslower.py解读
显示慢于阈值的 btrfs 读取、写入、打开和同步操作。原创 2024-04-05 08:29:53 · 483 阅读 · 0 评论 -
5.108 BCC工具之virtiostat.py解读
virtiostat程序用于跟踪virtio设备以分析IO操作和吞吐量。例如,客户端挂载了一个9pfs,而我们再也无法通过iostat命令获取IO统计信息。在这种情况下,我们只能从VIRTIO层而不是块层获取统计信息。示例。原创 2024-04-04 07:09:38 · 466 阅读 · 0 评论 -
5.107 BCC工具之mountsnoop.py解读
mountsnoop工具在系统范围内跟踪 mount() 和 umount 系统调用。原创 2024-04-04 07:09:13 · 106 阅读 · 0 评论 -
5.106 BCC工具之mdflush.py解读
mdflush工具在md驱动程序级别跟踪刷新操作,并打印包括刷新时间在内的详细信息。原创 2024-04-03 12:28:33 · 244 阅读 · 0 评论 -
5.109 BCC工具之btrfsdist.py解读
btrfsdist追踪 btrfs 的读取、写入、打开和同步操作,并将它们的延迟以 2 的幂次直方图的形式进行汇总。原创 2024-04-03 12:28:13 · 269 阅读 · 0 评论 -
5.105 BCC工具之filetop.py解读
filetop显示了按文件进行的读取和写入操作,并提供进程详细信息。原创 2024-04-02 11:55:47 · 600 阅读 · 0 评论 -
5.104 BCC工具之fileslower.py解读
fileslower可以显示低于阈值的基于文件的同步读写情况。此脚本使用内核对VFS接口上的同步读取和写入的动态跟踪,以识别任何文件系统的慢文件读取和写入。它通过跟踪__vfs_read()和__vfs_write()函数,并过滤出同步I/O(通往new_sync_read()和new_sync_write()的路径)以及带有文件名的I/O来实现此功能。这种方法仅提供了两种文件系统请求类型的视图。通常还有许多其他类型:异步I/O、目录操作、文件句柄操作等,此工具并不包含这些。原创 2024-04-02 08:21:18 · 221 阅读 · 0 评论 -
5.103 BCC工具之filegone.py解读
filegone追踪文件消失的原因,无论是被删除还是被重命名。原创 2024-04-02 08:21:01 · 247 阅读 · 0 评论 -
5.102 BCC工具之filelife.py解读
filelife追踪短生命周期的文件:那些在追踪过程中被创建然后又被删除的文件。原创 2024-04-01 07:00:48 · 625 阅读 · 0 评论 -
5.101 BCC工具之dirtop.py解读
dirtop工具按目录显示读取和写入情况.原创 2024-04-01 07:00:30 · 216 阅读 · 0 评论 -
5.100 BCC工具之biosnoop.py解读
biosnoop用于追踪块设备 I/O(磁盘 I/O),并为每个 I/O 打印一行输出。原创 2024-03-31 07:48:49 · 839 阅读 · 0 评论 -
5.99 BCC工具之biopattern.py解读
识别随机/顺序磁盘访问模式。原创 2024-03-31 07:48:25 · 198 阅读 · 0 评论 -
【基础篇】1.1 单片机的概念
单片机(Single-Chip Microcomputer),也被称为单片微控制器,是一种集成电路芯片。它采用超大规模集成电路技术,将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上,构成了一个小而完善的微型计算机系统。简单来说,单片机就是一台微型计算机。我们来看下我们常见的计算机和单片机在结构上有什么区别?原创 2024-03-30 12:39:52 · 343 阅读 · 0 评论 -
5.98 BCC工具之biotop.py解读
biotop工具是“block device I/O top”的缩写,它会统计哪些进程正在执行磁盘I/O操作。它通过收集和分析内核的块设备I/O事件,提供了实时的磁盘I/O性能数据。它类似于top命令,但是专注于显示哪些进程正在执行磁盘I/O操作,并按照I/O量进行排序。这使得开发人员和系统管理员能够快速识别出最活跃的磁盘I/O消费者,并了解它们对系统性能的影响。原创 2024-03-30 06:08:31 · 231 阅读 · 0 评论 -
5.97 BCC工具之biolatency.py解读
biolatency 跟踪块设备 I/O(磁盘 I/O),并记录 I/O 延迟(时间)的分布,通过 Ctrl-C 可以停止跟踪,并将其以直方图的形式打印出来。它通过动态追踪blk_族函数(与块设备相关的内核函数)并记录函数的变化,从而收集块设备I/O的延迟信息。它记录I/O延迟的分布,并以直方图的形式显示出来,使用户能够直观地了解I/O操作的性能特征。原创 2024-03-30 06:08:11 · 242 阅读 · 0 评论 -
4.1 ebpf基础能力拆解
想要彻底理解eBPF的能力,我们就需要知道它主要的应用场景是什么?无论eBPF的演进路线,还是开发者生态,eBPF主要的两大应用场景分别是网络优化和性能监控。网络优化这里不必赘述,因为它是从BPF演进拓展而来,而BPF则因网络而存在。本章节主要来聊性能监控。ebpf虽然让开发者们具备了在不改动内核的情况下可以编写运行在内核中的ebpf程序,但这是有条件的。原创 2024-03-29 22:07:35 · 276 阅读 · 0 评论