当前位置: 首页 > news >正文

ebpf的快速开发工具--libbpf-bootstrap

基于ubuntu22.04-深入浅出 eBPF

基于ebpf的性能工具-bpftrace

基于ebpf的性能工具-bpftrace脚本语法

基于ebpf的性能工具-bpftrace实战(内存泄漏)

什么是libbpf-bootstrap

  • libbpf-bootstrap是一个开源项目,旨在帮助开发者快速启动和开发使用eBPF(Extended Berkeley Packet Filter)和libbpf的程序。eBPF是一种可以在Linux内核中运行的程序,提供了强大的网络过滤、系统调用监控和性能分析等功能。libbpf是一个库,用于加载和管理eBPF程序和map。
  • libbpf-bootstrap提供了一些样例程序和模板,帮助开发者理解如何使用libbpf创建、加载、管理eBPF程序,并与这些程序进行交互。
  • libbpf-bootstrap开源链接:https://github.com/libbpf/libbpf-bootstrap/

以下是libbpf-bootstrap的一些主要特性:

  1. 样例程序:libbpf-bootstrap提供了一些样例程序,用于演示如何使用libbpf和eBPF。这些样例程序包括网络监控、性能分析等不同类型的eBPF程序。
  2. 构建系统集成:libbpf-bootstrap提供了集成到构建系统的模板,可以方便地编译和链接eBPF程序。
  3. BPF CO-RE(Compile Once - Run Everywhere)支持:BPF CO-RE是一种让eBPF程序能在不同版本的Linux内核上运行的技术。libbpf-bootstrap支持CO-RE,使得开发的eBPF程序可以在不同版本的Linux内核上运行,无需重新编译。
  4. 用户空间和内核空间程序的交互:libbpf-bootstrap展示了如何从用户空间程序发送数据到eBPF程序,以及从eBPF程序返回数据到用户空间。
  5. 详细的文档:libbpf-bootstrap提供了详细的文档,包括如何安装、如何使用样例程序,以及如何创建自己的eBPF程序等。

使用libbpf-bootstrap的理由

  • 开始使用BPF在很大程度上仍然令人生畏,因为即使为简单的"Hello World"般的BPF应用程序设置构建工作流,也需要一系列步骤,对于新的BPF开发人员来说,这些步骤可能会令人沮丧和令人生畏。这并不复杂,但知道必要的步骤是一个(不必要的)困难的部分。
  • libbpf-bootstrap就是这样一个BPF游乐场,它已经尽可能地为初学者配置好了环境,帮助他们可以直接步入到BPF程序的书写。它综合了BPF社区多年来的最佳实践,并且提供了一个现代化的、便捷的工作流。libbpf-bootstrap依赖于libbpf并且使用了一个很简单的Makefile。对于需要更高级设置的用户,它也是一个好的起点。即使这个Makefile不会被直接使用到,也可以很轻易地迁移到别的构建系统上。

libbpf-bootstrap构建流程

  1. libbpf-bootstrap的测试环境:本篇文章我们将在Ubuntu22.04进行验证,下一篇文章我们将其在yy3568进行验证。
  2. 安装libbpf-bootstrap依赖的工具:clang,libelf,zlib
$ sudo apt-get install clang libelf1 libelf-dev zlib1g-dev
  1. 获取源码libbpf-bootstrap
// 获取libbpf-bootstrap主仓的代码
$ git clone https://github.com/libbpf/libbpf-bootstrap// 获取依赖的子仓代码
$ git submodule update --init --recursive
  1. 编译libbpf-bootstrap
$ cd examples/c/
$ make MKDIR    .outputMKDIR    .output/libbpfLIB      libbpf.aMKDIR    /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjsCC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf.oCC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf.oCC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.oCC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_errno.oCC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/netlink.oCC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/nlattr.o
.....BINARY   usdtBPF      .output/sockfilter.bpf.oGEN-SKEL .output/sockfilter.skel.hCC       .output/sockfilter.oBINARY   sockfilterBPF      .output/tc.bpf.oGEN-SKEL .output/tc.skel.hCC       .output/tc.oBINARY   tcBPF      .output/ksyscall.bpf.oGEN-SKEL .output/ksyscall.skel.hCC       .output/ksyscall.oBINARY   ksyscall
$ 
  1. 运行测试样例
  • 我们义kprobe测试样例为例,需要打开三个terminal,第一个terminal执行kprobe程序,第二个terminal 我们cat trace_pipi的内容,第三个terminal我们制造一些现场。

  • 当我们在第三个terminal制造现场的时候,第二个terminal就可以看到相关的探测内容

  • 第一个terminal执行kprobe程序:

$ sudo ./kprobe
  • 第二个terminal 我们cat trace_pipi的内容,需要进入超级管理员,在执行:
$ cat /sys/kernel/tracing/trace_pipe
  • 第三个terminal我们制造一些现场:
$ touch youyeetoo
$ rm -rf youyeetoo
  • 最终效果

下一步计划

将在深圳风火轮科技推出的YY3568上跑ebpf程序,敬请期待

http://www.lryc.cn/news/196355.html

相关文章:

  • 万界星空科技/生产制造执行MES系统/开源MES/免费MES
  • 螺纹快速接头在卫浴行业中的应用提高产量降低生产成本
  • 通达OA 2016网络智能办公系统 handle.php SQL注入漏洞
  • parameter的各种用法以及localparam的用法
  • 网络社区挖掘-图论部分的基本知识笔记
  • Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式
  • mysql为什么会选错索引,以及优化器是如何选择索引的
  • vue基础知识十七:你知道vue中key的原理吗?说说你对它的理解
  • 攻防演练蓝队|Windows应急响应入侵排查
  • uniapp 小程序实现图片宽度100%、高度自适应的效果
  • 05. NXP官方SDK使用实验
  • Python- JSON使用初探
  • vim的配置文件
  • [python] pytest
  • 【王道代码】【2.2顺序表】d1
  • 【Linux】【创建文件】Linux系统下在命令行中创建文件的方法
  • Pytorch之MobileViT图像分类
  • 03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令
  • 论文阅读:CenterFormer: Center-based Transformer for 3D Object Detection
  • Arduino驱动BNO055九轴绝对定向传感器(惯性测量传感器篇)
  • MQTT测试工具及使用教程
  • yolov7改进优化之蒸馏(一)
  • 视频美颜SDK,提升企业视频通话质量与形象
  • webmin远程命令执行漏洞
  • docker离线安装和使用
  • 解决 MyBatis 一对多查询中,出现每组元素只有一个,总组数与元素数总数相等的问题
  • 这应该是关于回归模型最全的总结了(附原理+代码)
  • 基于闪电连接过程优化的BP神经网络(分类应用) - 附代码
  • Linux性能优化--性能工具:网络
  • 【Linux】线程互斥与同步