ebpf的简单学习

ebpf,简单,学习 · 浏览次数 : 184

小编点评

**ebpf简介** ebpf是一种内核级虚拟化技术,可编程的虚拟机可以定义规则并直接在内核态进行过滤和使用。 **主要特点:** * 避免上下文切换、中断等导致的cycle损失。 * 效率极高,避免了上下文切换、中断等导致的性能下降。 * 可以定义很多规则,方便用户定义个性化的过滤。 **学习ebpf的步骤:** 1. 安装内核版本4.15或更高版本。 2. 安装性能分析工具:`apt install bpftrace perf-tools`。 3. 学习ebpf的基本用法,比如使用`bpftrace`跟踪命令执行的命令。 4. 学习perf-tools的脚本和工具,例如`cachestat`和`cachetop`。 **安装bpftrace:** ``` yum install bpftrace -y ``` **使用bpftrace:** ``` bpftrace -e 'uretprobe:/bin/bash:readline { printf(\"%s\\", str(retval)); }' ``` **其他工具:** * perf-tools: Brendan Gregg 大神的工具集,包含`cachestat`、`cachetop`等工具。 * x86和arm平台的工具可能存在差异,需要根据平台进行调整。

正文

ebpf的简单学习-万事开头难


前言

bpf 值得是巴克利包过滤器
他的核心思想是在内核态增加一个可编程的虚拟机. 
可以在用户态定义很多规则, 然后直接在内核态进行过滤和使用. 
他的效率极高. 因为避免了上下文切换,中断等导致的cycle损失. 

很多先进的工具,比如XDP以及K8S的cilium等网络组件.都是基于ebpf而来.
因为bpf最初的寄存器太少,并且仅是实现了包过滤,
ebpf增加了寄存器的数量,实现了更多的功能. 

类似于Intel的DPDK工具也是类似的原理,直接用户态操作硬件资源. 

工具

ebpf有很多工具. 学习起来也是很痛苦(从春节鸽到现在)
最近实在忍受不了自己的拖沓了, 晚上学习了下简单的bpftrace以及perf-tools.
想着能够简单总结一下, 避免一直不作为. 

很多需要写c 代码的地方我不是很熟. 计划今年要进行这一块的深入学习. 

安装

bpftrace 需要内核比较新, 建议是 4.15 以上, 越新越好.
perf-tools 是性能大神 Brendan Gregg 编写的一套工具.

yum install bpftrace -y 可以安装对应的一套工具, 在线安装
默认仓库是: AppStream

git clone --depth 1 https://github.com/brendangregg/perf-tools
可以用来安装perf-tools工具
里面有很多类似的工具可以使用. 比如cachetop, cachestat等. 

bpftrace的简单用法

bpftrace -e 'uretprobe:/bin/bash:readline { printf("%s\n", str(retval)); }'
如上命令可以跟踪所有的shell脚本读取执行的命令. 

效果为:
[root@PG15 bin]# bpftrace -e 'uretprobe:/bin/bash:readline { printf("%s\n", str(retval)); }'
Attaching 1 probe...
ping 8.8.8.8
ifconfig

bpftrace的说明

bpftrace 其实是一种调试分析程序的方法

不同于测试环境可以debug. 生产环境基本上没有debug的条件:
1. 现在很多镜像部署, 都是最小化打包,一方面提高性能,减少内存占用, 另一方面减少磁盘文件大小,减少镜像大小.
2. debug的断点会导致生产环境卡顿, 只要不是有受虐倾向的客户(或者是喝茶看报纸的客户)都会大为光火

所以bpftrace可能就是一个很好的解决方案了.
但是bpftrace需要对产生异常的代码非常熟悉,要了解到具体产生异常的系统调用.
有时需要使用 readelf等方式获取具体的调用才可以.
方法比较复杂, 我这边还没入门, 也没法详细解释了.

perf-tools

Brendan Gregg 大神的工具集. 

注意perf-tools不区分架构, arm和x86都可以使用. 主要是脚本为主.
cachestat  cachetop 是几个比较基本的命令
注意部分工具需要安装 yum install perf 才可以使用 

需要说明, x86都可以进行使用, 但是arm的很多命令存在异常, 需要修复. 


举例

 ./syscount 
 control + c 会出现如下的信息. 
[ perf record: Captured and wrote 3.537 MB perf.data (27102 samples) ]
COMM                COUNT
rpcbind                 1
lsmd                    4
gmain                  12
sssd_be                12
sshd                   18
perf                   25
NetworkManager         55
in:imjournal           56
sssd_nss              264
tuned                1167
redis-server         1255
aliyun-service       1621
AliYunDunUpdate      1721
AliYunDun           20891

可以参考火焰图进行生成. 

与ebpf的简单学习相似的内容:

ebpf的简单学习

ebpf的简单学习-万事开头难 前言 bpf 值得是巴克利包过滤器 他的核心思想是在内核态增加一个可编程的虚拟机. 可以在用户态定义很多规则, 然后直接在内核态进行过滤和使用. 他的效率极高. 因为避免了上下文切换,中断等导致的cycle损失. 很多先进的工具,比如XDP以及K8S的cilium等网

Python学习之七_input和print

Python学习之七_input和print 摘要 python3 之后 函数必须带 () 了 因为我开始学习的比较晚, 所以准备Python3开始学起 前面主要是模仿别人的代码进行学习 后续慢慢学习 使用python调用ebpf等内容. 这里简单先总结一下input和print的函数. 作为一个学

[转帖]宋宝华:用eBPF/bcc分析系统性能的一个简单案例

原创 宋宝华 Linux阅码场 3月8日 bcc是eBPF的一种前端,当然这个前端特别地简单好用。可以直接在python里面嵌入通过C语言写的BPF程序,并帮忙产生BPF bytecode和load进入kernel挂载kprobe、tracepoints等上面执行。之后,还可以从python取出来C

[转帖]程序员的平行宇宙 —— eBPF 系统级跟踪技术简单入门

https://blog.mygraphql.com/zh/posts/low-tec/trace/trace-quick-start/ 程序员的平行宇宙 程序员有两个世界: 一个是编码世界,我们很容易认为,我们考虑了一切,也完成了一切的代码。 然后是运行世界,我们发现,无论我们多么的严谨和考虑一切

[转帖]eBPF介绍

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

[转帖]Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]python 性能优化监控工具_Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

【转帖】Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]Linux性能优化(四)——BCC性能监控工具

原文 https://blog.51cto.com/9291927/2593705 1、BCC简介 一、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不一样的前端支持,包括Python和Lua,实现了map建立、

[转帖]ebpf简介_ebpf编程

https://cloud.tencent.com/developer/article/2154750?areaSource=103001.1&traceId=5pH2ixinTUE3D1qxjyVnA 什么是eBPF eBPF 是什么呢? 从它的全称“扩展的伯克利数据包过滤器 (Extended