0
点赞
收藏
分享

微信扫一扫

ebpf的简单学习

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

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



举报

相关推荐

0 条评论