![](https://img-blog.csdnimg.cn/551a0896211d41a78d9b709444beabbc.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
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 · 137 阅读 · 0 评论 -
6.15 CO-RE(Compile Once – Run Everywhere)使用手册(一,读取内核数据)
到目前为止,最常见的BPF CO-RE操作是从某个内核结构中读取字段的值。libbpf提供了一系列辅助函数,使得读取字段变得简单且CO-RE可重定位。CO-RE可重定位意味着,无论结构的实际内存布局如何(这可能会根据实际的内核版本和使用的内核配置而变化),BPF程序都将被调整为从结构的起始位置开始,以正确的实际偏移量读取字段。原创 2024-06-12 22:40:28 · 181 阅读 · 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 · 107 阅读 · 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 · 263 阅读 · 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 · 206 阅读 · 0 评论 -
6.11 Libbpf-bootstrap(二,Minimal)
minimal是一个很好的入门示例。你可以将其视为一个简单的POC,用于尝试BPF功能。它不使用BPF CO-RE,因此你可以使用较旧的内核,并且只需包含系统内核头文件即可获取内核类型定义。这不是构建生产就绪应用程序和工具的最佳方法,但对于本地实验来说已经足够了。原创 2024-06-01 16:46:24 · 103 阅读 · 0 评论 -
6.10 Libbpf-bootstrap(一,简介)
在看完前面的介绍,是不是感觉看了也就看了。但是,如果想要像BCC那样使用libbpf编写BPF程序,该怎么开始呢?那么这就需要libbpf-bootstrap了。libbpf-bootstrap是官方推荐的一个范式,就像我们写PPT的模版。简单来说可以简化我们的BPF开发流程,它可以帮助我们快速开发编写自己的BPF程序。这也就为什么把这个项目叫做bootstrap了。就像你需要使用一台电脑环境写个贪吃蛇游戏,那么你不需要在去买显卡,CPU,主板去组装一台电脑;而是只需要按下电源键即可。通过使用。原创 2024-05-29 23:04:33 · 1070 阅读 · 0 评论 -
6.8 LIBBPF API(七,bpf_core_read.h 函数,定义,枚举)
bpf_core_read.h 函数,定义,枚举原创 2024-05-28 22:45:25 · 199 阅读 · 0 评论 -
6.7 LIBBPF API(六,bpf_tracing.h 定义)
bpf_tracing.h 函数列表原创 2024-05-28 22:22:13 · 236 阅读 · 0 评论 -
6.6 LIBBPF API(五,btf.h 函数列表,定义,枚举)
btf.h.h 函数列表,定义,枚举原创 2024-05-26 23:16:20 · 62 阅读 · 0 评论 -
6.5 LIBBPF API(四,bpf.h函数列表与定义)
bpf.h函数列表原创 2024-05-22 21:38:27 · 163 阅读 · 0 评论 -
6.3 LIBBPF API(二,libbpf.h函数)
函数介绍原创 2024-03-27 06:20:05 · 336 阅读 · 0 评论 -
6.1 LIBBPF简介
libbpf和BPF CO-RE可以让我们专心做一个开发者,及时你对内核的理解没有那么深入。它同样大大减少了内核版本的差异给我们带来的痛苦,实现了真正意义上的Build once,Run everywhere。Libbpf扮演BPF程序加载器的角色,执行平凡的设置工作(重定位、加载和验证BPF程序、创建BPF映射、附加到BPF钩子等),让开发者只需要关注所开发BPF程序的正确性和性能。原创 2024-03-26 06:54:18 · 606 阅读 · 0 评论 -
5.120 BCC工具之zfsslower.py解读
zfsslower 显示慢于阈值的 ZFS 读取、写入、打开和 fsyncs 操作。原创 2024-04-11 22:42:52 · 2455 阅读 · 0 评论 -
5.118 BCC工具之xfsslower.py解读
xfsslower显示了XFS的读取、写入、打开和fsync操作,这些操作慢于一个阈值。原创 2024-04-10 08:08:48 · 487 阅读 · 0 评论 -
5.117 BCC工具之xfsdist.py解读
xfsdist 追踪 XFS 的读取、写入、打开和 fsyncs 操作,并将其延迟以 2 的幂次直方图的形式进行总结。原创 2024-04-09 07:47:17 · 281 阅读 · 0 评论 -
5.116 BCC工具之vfsstat.py解读
这追踪了一些常见的VFS调用,并每秒打印摘要。原创 2024-04-09 07:46:57 · 230 阅读 · 0 评论 -
5.115 BCC工具之vfscount.py解读
这通过追踪所有以“vfs_”开头的内核函数,计算了在此期间发生的VFS调用次数。默认情况下,时间为99999999秒。原创 2024-04-08 08:42:57 · 435 阅读 · 0 评论 -
5.114 BCC工具之nfsdist.py解读
nfsdist 追踪 NFS 读取、写入、打开和 getattr,并将其延迟概括为 2 的幂次方直方图。原创 2024-04-08 08:42:37 · 475 阅读 · 0 评论 -
5.113 BCC工具之nfsslower.py解读
NFS是一种分布式文件系统协议,允许客户端通过网络访问服务器上的文件。然而,由于网络延迟、服务器负载等原因,NFS操作可能会变得缓慢,从而影响系统性能。nfsslower显示慢于阈值的 NFS 读取、写入、打开和 getattr 操作。这有助于我们发现导致NFS性能下降的慢操作,并进一步分析其原因.该工具还可以追踪commit操作,这是NFS特有的,可能会非常慢。警告:这会对这些NFS操作(包括从文件系统缓存中的读取和写入)添加低开销的检测。这种读取和写入可能会非常频繁(取决于工作负载;原创 2024-04-06 10:55:00 · 395 阅读 · 0 评论 -
5.112 BCC工具之ext4slower.py解读
ext4slower可以显示慢于阈值的ext4读取、写入、打开和fsync操作。原创 2024-04-06 10:54:46 · 254 阅读 · 0 评论 -
5.111 BCC工具之ext4dist.py解读
ext4dist跟踪ext4的读取、写入、打开和fsync操作,并将其延迟总结为2的幂次方直方图。原创 2024-04-05 08:30:20 · 255 阅读 · 0 评论 -
5.110 BCC工具之btrfsslower.py解读
显示慢于阈值的 btrfs 读取、写入、打开和同步操作。原创 2024-04-05 08:29:53 · 416 阅读 · 0 评论 -
5.108 BCC工具之virtiostat.py解读
virtiostat程序用于跟踪virtio设备以分析IO操作和吞吐量。例如,客户端挂载了一个9pfs,而我们再也无法通过iostat命令获取IO统计信息。在这种情况下,我们只能从VIRTIO层而不是块层获取统计信息。示例。原创 2024-04-04 07:09:38 · 430 阅读 · 0 评论 -
5.107 BCC工具之mountsnoop.py解读
mountsnoop工具在系统范围内跟踪 mount() 和 umount 系统调用。原创 2024-04-04 07:09:13 · 56 阅读 · 0 评论 -
5.106 BCC工具之mdflush.py解读
mdflush工具在md驱动程序级别跟踪刷新操作,并打印包括刷新时间在内的详细信息。原创 2024-04-03 12:28:33 · 195 阅读 · 0 评论 -
5.109 BCC工具之btrfsdist.py解读
btrfsdist追踪 btrfs 的读取、写入、打开和同步操作,并将它们的延迟以 2 的幂次直方图的形式进行汇总。原创 2024-04-03 12:28:13 · 239 阅读 · 0 评论 -
5.105 BCC工具之filetop.py解读
filetop显示了按文件进行的读取和写入操作,并提供进程详细信息。原创 2024-04-02 11:55:47 · 529 阅读 · 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 · 186 阅读 · 0 评论 -
5.103 BCC工具之filegone.py解读
filegone追踪文件消失的原因,无论是被删除还是被重命名。原创 2024-04-02 08:21:01 · 204 阅读 · 0 评论 -
5.102 BCC工具之filelife.py解读
filelife追踪短生命周期的文件:那些在追踪过程中被创建然后又被删除的文件。原创 2024-04-01 07:00:48 · 556 阅读 · 0 评论 -
5.101 BCC工具之dirtop.py解读
dirtop工具按目录显示读取和写入情况.原创 2024-04-01 07:00:30 · 168 阅读 · 0 评论 -
5.100 BCC工具之biosnoop.py解读
biosnoop用于追踪块设备 I/O(磁盘 I/O),并为每个 I/O 打印一行输出。原创 2024-03-31 07:48:49 · 707 阅读 · 0 评论 -
5.99 BCC工具之biopattern.py解读
识别随机/顺序磁盘访问模式。原创 2024-03-31 07:48:25 · 153 阅读 · 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 · 127 阅读 · 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 · 121 阅读 · 0 评论 -
5.96 BCC工具之dcstat.py解读
dcstat工具用于显示目录项缓存(dcache)的统计信息。原创 2024-03-29 07:02:02 · 160 阅读 · 0 评论 -
5.95 BCC工具之dcsnoop.py解读
dcsnoop工具用于追踪目录项缓存(dcache)的查找,并可用于 dcstat(8) 之外的进一步调查。由于 dcache 查找可能很频繁,因此输出可能很冗长。默认情况下,仅显示查找失败的情况。原创 2024-03-29 07:01:42 · 128 阅读 · 0 评论 -
5.94 BCC工具之cachetop.py解读
cachetop工具用于监视和统计系统页面缓存(page cache)的使用情况。页面缓存是Linux内核用于存储从磁盘读取的文件数据的内存区域,它可以显著提高文件访问的速度,因为当数据已经缓存在内存中时,应用程序无需再次从磁盘读取。cachetop则是类似于传统的top命令,但它专注于显示与页面缓存相关的实时统计信息。这些信息包括每个进程的缓存命中、未命中以及相应的命中率。这对于了解哪些进程在大量使用页面缓存、哪些进程可能由于频繁的缓存未命中而遭受性能下降等问题非常有用。当我们使用cachetop。原创 2024-03-28 07:13:20 · 178 阅读 · 0 评论 -
5.93 BCC工具之cachestat.py解读
对文件系统页面缓存的命中与未命中次数。页面缓存是Linux内核用来缓存磁盘上文件数据的一种内存区域,当应用程序请求读取文件时,如果数据已经在页面缓存中,那么就可以直接从内存中获取,而无需从磁盘上读取,从而大大提高了文件访问的速度。而cachestat工具则专门用于监控和报告Linux文件系统页面缓存(page cache)的命中与未命中情况。它通过定期采样页面缓存的相关统计信息,并计算出命中率(hits)和未命中率(misses),帮助我们了解系统缓存的使用情况和性能表现。原创 2024-03-28 07:12:34 · 203 阅读 · 0 评论