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

news2025/1/11 22:55:07

基于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    .output
  MKDIR    .output/libbpf
  LIB      libbpf.a
  MKDIR    /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs
  CC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf.o
  CC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf.o
  CC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o
  CC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_errno.o
  CC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/netlink.o
  CC       /home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/nlattr.o
.....

  BINARY   usdt
  BPF      .output/sockfilter.bpf.o
  GEN-SKEL .output/sockfilter.skel.h
  CC       .output/sockfilter.o
  BINARY   sockfilter
  BPF      .output/tc.bpf.o
  GEN-SKEL .output/tc.skel.h
  CC       .output/tc.o
  BINARY   tc
  BPF      .output/ksyscall.bpf.o
  GEN-SKEL .output/ksyscall.skel.h
  CC       .output/ksyscall.o
  BINARY   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.coloradmin.cn/o/1097290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务拆分的思考

一、前言 前面几篇文章介绍了微服务核心的两个组件:注册中心和网关,今天我们来思考一下微服务如何拆分,微服务拆分难度在于粒度和层次,粒度太大拆分的意义不大,粒度太小开发、调试、运维会有很多坑。 二、微服务划分…

【初识Linux】:常见指令(2)

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

为健康护航的小帮手,dido E55S Pro智能手表体验

现在很多年轻人每天都要长时间工作,没有时间锻炼身体,很容易导致各种健康隐患,工作效率也容易下降,非常有必要通过智能手表等工具,随时监测自己的健康状态。现在支持健康监测的智能手表非常多,用起来也简单…

Java反射使用实例

Java反射:解析类的秘密 Java反射是一项强大的功能,允许开发人员在运行时检查、操作和实例化类、方法、字段以及其他Java程序中的元素。这种能力赋予了Java语言更大的灵活性和动态性,但也需要慎重使用,因为它可能会导致性能问题和…

[Halcon检测] 划痕检测之高斯导数提取

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

带你了解小程序的框架之谜

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《微信小程序 》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,…

BUUCTF学习(6): 命令执行ip

1、介绍 2、hackbar安装 BUUCTF学习(四): 文件包含tips-CSDN博客 ?ip127.0.0.1;ag;cat$IFS$9fla$a.php 空格过滤 $IFS$9 检查源代码 结束

ssm+vue的药品管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的药品管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

英语进阶指南:高效学习方法,提升英语水平 | 开源专题 No.35

这些开源项目集合了英语学习与翻译工具,包括英语进阶指南、多功能翻译工具、面向程序员的英语学习指南和单词记忆软件。它们提供实用方法,覆盖多个学习方面,满足不同需求。无论您是英语初学者还是想进一步提升,这些资源都能助您轻…

系列八、Redis的事务

一、是什么 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不允许加塞。 二、能干嘛 一个队列中,一次性、顺序性、排他性的执行一些列命令。 三、怎么玩…

3.Vue-在Vue框架中搭建路由

题记 以下是在vue框架中搭建路由的全过程,包括全部代码。 创建路由 如果你的文件中没有 router文件夹,可以使用以下命令创建: vue add router 注意:生成的路由文件会因为选择的自定义选项不同,而有所差异 生成的代码…

【ArcGIS Pro二次开发】(71):添加图层名称和路径到字段

如题,这个工具的目的就是将图层的名称和路径添加到字段值中。 有时候图层的名称和路径也是重要的信息,需要参与到字段的计算或是分析中,但是Arcgis Pro中没有一个方便的方法可以将其写入字段值,因此,就做了这么一个小…

力扣第77题 组合 c++ 回溯经典题 注释加优化 代码

题目 77. 组合 中等 相关标签 回溯 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&a…

基于Java的健身俱乐部管理系统设计与实现(亮点:健身课程课程、会员下单、在线支付)

文章目录 前言具体实现截图详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c…

怎么查苹果手机激活时间?详细查看指南来了!

苹果手机之所以受到广大消费者的喜爱,是因为它提供了优质的用户体验、强大的生态系统以及美观的设计等等。很多小伙伴在购买iPhone后都会担心一个问题:手机是否为新机,手机有没有被激活过?那么,怎么查苹果手机激活时间…

电压放大器在铁电材料表征中的应用有哪些

电压放大器在铁电材料表征中具有广泛的应用。铁电材料是一类特殊的功能材料,具有独特的电荷分布和结构变化特性,在电子器件、传感器、存储器等领域具有重要的应用价值。而电压放大器作为一种重要的电子器件,可以提供稳定可靠的信号放大功能&a…

mysql分组排序并取每组的前1条记录

实际开发中会遇到使用mysql分组统计,并且要求取每组数据的前1条数据 如下:需要根据模块分组,取每组中的前1条优质供应商数据,取前几条数据,其实会用到上篇文章中的排名函数row_number() 函数来实现,其含义…

开源原生android的视频编辑软件

videoEditAndroid 介绍 开源原生android的视频编辑软件 本人android 新手,也是边写边学习中,感觉写的很乱,功能虽已实现,但是会不断优化代码 也欢迎有兴趣的小伙伴加入 码农不易,欢迎 star 项目页面功能完成列表 视频选择(待完善) 静音 视频编辑 导…

AC修炼计划(AtCoder Regular Contest 165)

传送门:AtCoder Regular Contest 165 - AtCoder 本次习题参考了樱雪猫大佬的题解,大佬的题解传送门如下:Atcoder Regular Contest 165 - 樱雪喵 - 博客园 (cnblogs.com) A - Sum equals LCM 第一题不算特别难 B - Sliding Window Sort 2 对…

Latex伪代码Switch Case(简单暴力版)

自己添加新命令的Switch Case,用的algorithm和algorithmicx安装包 格式可调整! 效果图: 代码: \usepackage{algorithm} \usepackage{algorithmicx} \newcommand{\SWITCH}[1]{\textbf{switch} (#1)} \newcommand{\ENDSWITCH}{\t…