ebpf 单行程序学习

ebpf,单行,程序,学习 · 浏览次数 : 35

小编点评

## bpftrace 单行程序学习总结 **1. 跟踪进程** * `bpftrace -e 'tracepoint:syscalls:sys_enter_execve { join(args->argv);}'`:跟踪进程执行启动的系统调用。 **2. 统计系统调用数量** * `bpftrace -e 'tracepoint:raw_syscalls:sys_enter {@[pid,comm] = count();}`:统计最近 3 秒内的系统调用数量。 **3. 统计页面故障数量** * `bpftrace -e 'software:page-faults:1 {@[pid,comm] = count();}`:统计最近 1 秒内的页面故障数量。 **4. 统计vfs调用数量** * `bpftrace -e 'kprobe:vfs_* {@[probe] = count();}`:统计各个vfs的调用数量。 **5. 统计io尺寸** * `bpftrace -e 't:block:block_rq_issue {@bytes = hist(args->bytes);}`:统计每个block的读取大小。 **6. 统计udp发送字节数** * `bpftrace -e 'k:udp_sendmsg {@send_pytes = hist(arg2);}`:统计每个udp发送的字节数。

正文

ebpf 单行程序学习


背景

公司方神借给我一本: 
《BPF之巅:洞悉linux系统和应用性能》纸质书
拿回家晚上在沙发上看了几天。 
感觉书很厚看的不是很系统。
仅能凭自己的感觉总结一下这些天的读书感悟。 
本来计划是2023年的春节 7 天长假系统的学习ebpf
但是因为学习Linux内核参数耽搁了。
工作后又各种忙和慌乱一直没有时间学习。
已经快跟上我立减肥flag倒的程度了。。。

一些基本理解

cbpf和ebpf的基本概念都不在阐述。 
我理解ebpf之后其实核心的工具主要是bcc以及bpftrace
bcc是高手们自己利用python或者是go语言编写的工具集,用于实现特定的功能。
bpftrace 可以用于实现单行程序,更加符合unix do one thing do it well的哲学。

本次向简单理一下bpftrace的单行程序的理解。 
便于后续的学习和使用。

bpftrace单行程序很类似于 awk 的语法。 通过attach 到不同的探针,跟踪点,来获取内核的核心信息

bpftrace的语法格式

注意:这些内容参照Brendan Greeg书中的附录部分。
bpftrace -e 'probe /filter/ {action;}'
通过这个命令就可以实现对特定探针的信息收集等工作。 

注意使用之前需要先安装 bpftrace 可以在线安装: yum install bpftrace -y 即可。 
注意 -e 表明是跟踪这个探针
     -l 列出探针,不跟踪
     -c 执行命令

bpftrace的部分举例

1. 跟踪新进程。包括进程参数
bpftrace  -e 'tracepoint:syscalls:sys_enter_execve { join(args->argv);}'

2. 统计系统调用的数量
timeout 3 bpftrace -e 'tracepoint:raw_syscalls:sys_enter {@[pid,comm] = count();}'
注意这个命令可以统计最近三秒内的系统调用数量。如果不加时间可以使用 ctrl + c 的方式终止跟踪执行打印

3. bpftrace -e 'software:page-faults:1 {@[pid,comm] = count();}'
注意 如果不知道有哪一些probe 可以使用可以通过这个命令来获取
bpftrace -l 'software:*'
注意 原作者的附录里面page-fault 是错误的,需要改为复数形式。

4. 统计vfs调用
bpftrace -e 'kprobe:vfs_* {@[probe] = count();}'
注意这个是内核及的 kprobe kernel-probe

5. 统计io尺寸。可以验证数据库的块大小相关
bpftrace -e 't:block:block_rq_issue {@bytes = hist(args->bytes);}'
注意 t 是 tracepoint的缩写。 

6. 按照pid和进程名统计
bpftrace -e 't:syscalls:sys_enter_connect {@[pid,comm] = count();}'

7. 直方图统计udp发送的字节数
timeout 3 bpftrace -e 'k:udp_sendmsg {@send_pytes = hist(arg2);}'

困了 今天到这。。

与ebpf 单行程序学习相似的内容:

ebpf 单行程序学习

# ebpf 单行程序学习 ## 背景 ``` 公司方神借给我一本: 《BPF之巅:洞悉linux系统和应用性能》纸质书 拿回家晚上在沙发上看了几天。 感觉书很厚看的不是很系统。 仅能凭自己的感觉总结一下这些天的读书感悟。 本来计划是2023年的春节 7 天长假系统的学习ebpf 但是因为学习Lin

[转帖]eBPF 技术实践:加速容器网络转发,耗时降低 60%+

https://my.oschina.net/u/6150560/blog/5587717 背景 Linux 具有功能丰富的网络协议栈,并且兼顾了非常优秀的性能。但是,这是相对的。单纯从网络协议栈各个子系统的角度来说,确实做到了功能与性能的平衡。不过,当把多个子系统组合起来,去满足实际的业务需求,功

[转帖]eBPF 技术实践:加速容器网络转发,耗时降低60%+

https://new.qq.com/rain/a/20221103A03ZHE00 作者 | 王栋栋 背 景 Linux 具有功能丰富的网络协议栈,并且兼顾了非常优秀的性能。但是,这是相对的。单纯从网络协议栈各个子系统的角度来说,确实做到了功能与性能的平衡。不过,当把多个子系统组合起来,去满足实际

[转帖]倪朋飞:eBPF的2022之旅

https://zhuanlan.zhihu.com/p/598793866 你好,我是倪朋飞。 不知不觉间,2022 年已经走到了尾声。每个年尾我都喜欢回顾一下过去这一年的旅程,看看过去这一年都发生了什么事情,有什么收获,有什么遗憾,有什么值得期待的事情等等。对 eBPF 的学习和应用也是一样,今

[转帖]ebpf 月报 - 2023 年 1 月

https://segmentfault.com/a/1190000043355631 本刊物旨在为中文用户提供及时、深入、有态度的 ebpf 资讯。 如果你吃了鸡蛋觉得好吃,还想认识下蛋的母鸡,欢迎关注:笔者的 twitter:https://twitter.com/spacewand... Me

[转帖][译] eBPF 内核探测:如何将任意系统调用转换成事件(2016)

http://arthurchiao.art/blog/ebpf-turn-syscall-to-event-zh/ 译者序 本文翻译自 2016 年的一篇英文博客 How to turn any syscall into an event: Introducing eBPF Kernel prob

[转帖]eBPF监控工具bcc系列一启航

https://blog.51cto.com/u_15333820/3453313 在eBPF篇中,我们知道虽然可用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码。工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BC

[转帖]eBPF介绍

https://blog.51cto.com/u_15155099/2767325 1.BPF起源BPF源头起源于一篇1992年的论文,这篇论文主要提出一种新的网络数据包的过滤的框架,如下图所示。提出bpf的原因其实也很简单,早期我们从网卡中接收到很多的数据包,我们要想从中过滤出我们想要的数据包,我

[转帖]eBPF 完全入门指南.pdf(万字长文)

https://zhuanlan.zhihu.com/p/492185920 图片 eBPF 源于 BPF[1],本质上是处于内核中的一个高效与灵活的虚类虚拟机组件,以一种安全的方式在许多内核 hook 点执行字节码。BPF 最初的目的是用于高效网络报文过滤,经过重新设计,eBPF 不再局限于网络协

[转帖]ebpf的未来