当前位置: 首页 > 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程序,敬请期待

相关文章:

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

基于ubuntu22.04-深入浅出 eBPF 基于ebpf的性能工具-bpftrace 基于ebpf的性能工具-bpftrace脚本语法 基于ebpf的性能工具-bpftrace实战(内存泄漏) 什么是libbpf-bootstrap libbpf-bootstrap是一个开源项目,旨在帮助开发者快速启动和开发使用eBPF(Extended Berk…...

万界星空科技/生产制造执行MES系统/开源MES/免费MES

开源系统概述: 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、免费数字化大屏。 万界星空开源MES制造执行系统的Java开源版本。开源mes…...

螺纹快速接头在卫浴行业中的应用提高产量降低生产成本

螺纹快速接头在卫浴行业主要用于上下水测试和密封性测试,可以快速密封连接待测产品和水管。取代之前的工人手拧编织管六角螺母的方式,方便快捷,密封性好,产品测试更稳定。 卫浴行业产品必须具备很好的密封性,防止在实际…...

通达OA 2016网络智能办公系统 handle.php SQL注入漏洞

一、漏洞描述 北京通达信科科技有限公司通达OA2016网络智能办公系统 handle.php 存在sql注入漏洞,攻击者可利用此漏洞获取数据库管理员权限,查询数据、获取系统信息,威胁企业单位数据安全。 二、网络空间搜索引擎查询 fofa查询 app"T…...

parameter的各种用法以及localparam的用法

parameter的各种用法以及localparam的用法 一、这种写法放在v文件或者是用来调用其他的ram文件都是正确的。 一、这种写法放在v文件或者是用来调用其他的ram文件都是正确的。 module para_local();parameter a 10; // 第一种用法 parameter a 4d10; // 第二种用法 para…...

网络社区挖掘-图论部分的基本知识笔记

1 网络社区挖掘定义 网络社区挖掘是指利用数据挖掘技术和机器学习算法,分析社交网络、在线社区或互联网上的各种交互数据,以揭示其中隐藏的模式、关系和信息。这些社区可以是社交媒体平台、在线论坛、博客、微博等,人们在这些平台上进行交流…...

Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式

目录 一、Vue Router 1.1、下载 1.2、基本使用 a)引入 vue-router.js(注意:要在 Vue.js 之后引入). b)创建好路由规则 c)注册到 Vue 实例中 d)展示路由组件 1.3、切换路由的两种方式 1.…...

mysql为什么会选错索引,以及优化器是如何选择索引的

一:概念 在 索引建立之后,一条语句可能会命中多个索引,这时,索引的选择,就会交由 优化器 来选择合适的索引。 优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。 二…...

vue基础知识十七:你知道vue中key的原理吗?说说你对它的理解

一、Key是什么 开始之前&#xff0c;我们先还原两个实际工作场景 1.当我们在使用v-for时&#xff0c;需要给单元加上key <ul><li v-for"item in items" :key"item.id">...</li> </ul>2.用new Date()生成的时间戳作为key&#x…...

攻防演练蓝队|Windows应急响应入侵排查

文章目录 日志分析web日志windows系统日志 文件排查进程排查新增、隐藏账号排查启动项/服务/计划任务排查工具 日志分析 web日志 dirpro扫描目录&#xff0c;sqlmap扫描dvwa Python dirpro -u http://192.168.52.129 -b sqlmap -u "http://192.168.52.129/dvwa/vulnera…...

uniapp 小程序实现图片宽度100%、高度自适应的效果

因为image组件默认是有宽度跟高度的&#xff0c;所以这个高度不怎么好写 通过load事件来控制图片的高度 话不多说&#xff0c;直接上代码&#xff0c; <image class"img" src"/static/image.png" :style"{ height: imgHeight px }"mode&q…...

05. NXP官方SDK使用实验

05. NXP官方SDK使用实验 官方SDK移植 官方SDK移植 新建cc.h文件 SDK包里面会用到很多数据类型&#xff0c;所以需要在该文件中定义一些常用的数据类型 #pragma once #define __I volatile #define __O volatile #define __IO volatiletypedef sig…...

Python- JSON使用初探

JSON 在JSON格式中&#xff0c;{} 和 [] 是两种主要的数据结构&#xff0c;分别表示对象&#xff08;或称为字典、哈希、map&#xff09;和数组&#xff08;或称为列表、序列&#xff09;。 {} - 对象 在JSON中&#xff0c;对象是一组"key": value对的集合。这些键必…...

vim的配置文件

用户级别配置文件 ~/.vimrc 修改用户级别的配置文件只会影响当前用户, 不会影响其他的用户. 例如: 在用户的家目录下的.vimrc文件中添加 set tabstop4 ----设置缩进4个空格 set nu ----设置行号 set shiftwidth4 —设置ggG缩进4个空格, 默认是缩进8个空格 系统级别配置文件 /e…...

[python] pytest

在写一个项目前, 可以先编写测试模块 测试模块中包含了一个个最小的功能 当每一个功能都完善正确时 再将这些功能转换成项目运行的功能 多个项目运行的功能就组成了一个模块 多个模块就组成了一个项目服务 pytest 是一个 Python 测试框架&#xff0c;它提供了简单易用的语…...

【王道代码】【2.2顺序表】d1

关键字&#xff1a; 删除最小值最后位补齐&#xff1b;逆置&#xff1b;删除所有x&#xff1b;删除值为s到t区间的元素...

【Linux】【创建文件】Linux系统下在命令行中创建文件的方法

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…...

Pytorch之MobileViT图像分类

文章目录 前言一、Transformer存在的问题二、MobileViT1.MobileViT网络结构&#x1f353; Vision Transformer结构&#x1f349;MobileViT结构 2.MV2(MobileNet v2 block)3.MobileViT block&#x1f947;Local representations&#x1f948;Transformers as Convolutions (glob…...

03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令

创建Maven版的Java工程 Maven工程的坐标 数学中使用x、y、z三个向量可以在空间中唯一的定位一个点, Maven中也可以使用groupId,artifactId,version三个向量在Maven的仓库中唯一的定位到一个jar包 groupId: 公司或组织域名的倒序, 通常也会加上项目名称代表公司或组织开发的一…...

论文阅读:CenterFormer: Center-based Transformer for 3D Object Detection

目录 概要 Motivation 整体架构流程 技术细节 Multi-scale Center Proposal Network Multi-scale Center Transformer Decoder Multi-frame CenterFormer 小结 论文地址&#xff1a;[2209.05588] CenterFormer: Center-based Transformer for 3D Object Detection (arx…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1&#xff0c; 携带经纬度海拔的话题主要有三个&#xff1a; /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码&#xff0c;来分析他们的发布过程。发现前两个话题都对应了同一…...