BPF的简单学习


前言

本来规划过年期间学习一下bpf相关的内容
但是因为自己没有坚持学习,所以到最后一天才开始整理.
本来想深入学习一下相关内容,但是已经感觉已经无法完成.
最近大半年进行了很多性能诊断分析的工作,很多时候感觉已经到达瓶颈.
感觉必须要深入到内核,深入到指令运行周期才可以有所提升.
基于此,本次简单记录一下这些地方.可能不是很对. 希望自己能够慢慢完善.

摘要

1. 概念
2. 发展历史
3. 部分简单使用.
4. 学习的目标和方向

概念和发展历史

bpf 是 柏克利包过滤器
Berkeley packet fliter
他出现的年份非常早,跟linux的诞生基本同期
最早出现于1992年的论文,这篇论文主要提出一种新的网络数据包的过滤的框架
最开始bpf的目标主要是进行网络报的过滤
但是随着技术的发展,bpf有了更深入的发展可以实现更多的功能比如
2013年有人对bpf进行了彻底的改造,可以增加:安全,网络,甚至是基于内核的编程等特性. 因为有这个比较大的区别所以,之前仅用于网络报过滤的称之为 cbpf classic bpf
最新的改进则称之为 ebpf extend bpf

区别

第一:
cBPF支持的功能比较单一,只能够作用于网络的数据包的过滤上。
eBPF不仅支持网络的数据包的过滤上,也支持其他的事件类型,
如XDP、Perf Event、kprobe、tracepoint等等。
cBPF的功能在eBPF其实对应的就是Socket的部分。
第二:
引入Map机制。在cBPF我们通过接收队列将过滤后数据获取出来,
但是在eBPF我们可以将数据放到Map空间中。
Map空间是用户空间和内核空间共享的,
所以一般是在内核中将数据存入到Map空间中,然后在用户空间取出数据。
第三:
指令集变得更复杂了,与此同时,有了专门的用于编译BPF字节码的编译器clang/llvm。
第四:
还有在安全机制方面等等一些改变

工具的变迁

在cbpf的时代,一般就是tcpdump或者是wireshark等的抓包工具进行使用.
在ebpf的时代,更多的性能侦测,以及kernel的hook的实现,有了更深刻的用户.
最开始ebpf 有一套 bcc 工具 bpf complie collection 的工具组合.
但是因为较为复杂和难学:
需要安装定制的包, 并且需要使用一些C或者是C++的语言进行编写.
最近几年尤其是内核进入5.0和6.0的时代.
增加了libbpf工具包以及实现了 CO-RE的机制, 使得ebpf的工具链有了更大的发挥余地
Complie Once - Run Everywhere
这些工具可以使用python后者是go等语言进行编写工具链.

简单学习bcc

注意 因为需要比较高的内核版本,所以本次选用 OpenEuler 22.03
内核版本为:
Linux openeuler2203 5.10.0-60.18.0.50.oe2203.x86_64
#1 SMP Wed Mar 30 03:12:24 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 安装bcc工具链
yum install bcc kernel-devel kernel-headers -y
mkdir -p /bcc && cd /bcc 注意安装完之后会在 /usr/share/bcc/tools/ 目录下面有很多工具
可以执行里面的工具进行处理. 比如 ./filetop 但是这边总是报错 未解决. modprobe: FATAL: Module kheaders not found in directory /lib/modules/5.10.0-60.18.0.50.oe2203.x86_64
Unable to find kernel headers. Try rebuilding kernel with CONFIG_IKHEADERS=m (module) or installing the kernel development package for your running kernel version.
<built-in>:1:10: fatal error: './include/linux/kconfig.h' file not found
#include "./include/linux/kconfig.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Traceback (most recent call last):
File "/usr/share/bcc/tools/./filetop", line 164, in <module>
b = BPF(text=bpf_text)
File "/usr/lib/python3.9/site-packages/bpfcc/__init__.py", line 479, in __init__
raise Exception("Failed to compile BPF module %s" % (src_file or "<text>"))
Exception: Failed to compile BPF module <text>

学习的目标和方向

结合火焰图
结合进程的相关信息
linux 内核的知识 完善自己的调优技术链..

BPF的简单学习的更多相关文章

  1. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  2. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  3. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  4. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  5. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  6. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. mongodb,redis简单学习

     2.mongodb安装配置简单学习                   配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作                 ...

  9. html css的简单学习(三)

    html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...

  10. html css的简单学习(二)

    html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...

随机推荐

  1. 3种方法,用Java找出两个List中的重复元素

    本文分享自华为云社区<如何用Java找出两个List中的重复元素,读这一篇就够了>,作者: 努力的阿飞. 在Java编程中,我们经常需要找出两个列表(List)中的重复元素.在本文中,我们 ...

  2. 教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

  3. 常见的6种MySQL约束

    摘要:一篇文章带你彻底了解MySQL各种约束 MySQL约束 <1> 概念 是一种限制,它是对表的行和列的数据做出约束,确保表中数据的完整性和唯一性. <2> 使用场景 创建表 ...

  4. 一文带你认识MindSpore新一代分子模拟库SPONGE

    [本期推荐专题]物联网从业人员必读:华为云专家为你详细解读LiteOS各模块开发及其实现原理. 摘要:基于MindSpore自动并行.图算融合等特性,SPONGE可高效地完成传统分子模拟过程,利用Mi ...

  5. 华为云企业级Redis:助力VMALL打造先进特征平台

    摘要:当电商平台对AI算法模型的需求越来越多,特征数据平台的统一建设是不少开发团队头疼的事情.因为只有通过统一的特征数据存储,才能改变原有的"数据孤岛",解决生产重复造轮子的窘境. ...

  6. vue2升级vue3:vue3 hooks库选用

    之前a-hooks:https://ahooks.js.org/,比react-use 精简好用.但是没有vue版本的. 网上有个人实现的:https://github.com/dewfall123/ ...

  7. 火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 你有没有关注过 APP 给你推送的消息? 出于提升用户活跃度的考虑,APP 会定期在应用内面向用户进行内通推送,推 ...

  8. MySQL java new dat() 后插入数据库的时间不一致

    别用时间字段,做为关联字段,代码里的时间和插到数据库中有误差 MySQL java new dat() 后插入数据库的时间不一致,代码里new 的时间插到数据库中不一致

  9. ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  10. dmesg 时间误差现象

    案例现象 这天收到监控平台发来的告警,说有台机器程序崩溃了 因为以前也有过相关的错误,根据经验,用 dmesg命令看下内核信息 发现有点不对劲,报错信息的时间跟告警时间不一致,正常来讲报错时间应该跟告 ...