Linux动态观测神器bpftrace的5种探针、7个常见内置变量和常见操作?

news/2024/5/20 2:15:06

文章目录

  • 简介
  • 5种探针
  • 内置变量:
  • 安装
  • 实操
    • 内核态:
    • 返回值:
    • 多个函数
    • 用户态
    • if语句
    • 查看支持的观测点
  • 其他
  • 参考

简介

bpftrace使用 LLVM 作为后端将脚本编译为 BPF 字节码,利用 BCC(BPF Compiler Collection)与 Linux BPF 系统进行交互。

5种探针

kprobe:跟踪内核函数的入口。
kretprobe:跟踪内核函数的返回。
uprobe:跟踪用户空间函数的入口。
uretprobe:跟踪用户空间函数的返回。
tracepoint:跟踪内核中的 tracepoint。

内置变量:

arg0 到 argN:代表内核或用户空间探针的参数。
retval:代表内核或用户空间探针的返回值。
pid:当前进程的进程 ID。
tid:当前线程的线程 ID。
comm:当前进程的命令名称。
cpu:当前进程所在的 CPU。
nsecs:自系统启动以来的纳秒数。

安装

添加 BPFtools 仓库:

curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo

安装 bpftrace:

sudo yum install bpftrace bpftrace-tools bpftrace-doc bcc-static bcc-tools

实操

内核态:

bpftrace -e 'kprobe:ib_umem_get { printf("ib_umem_get called with args: %d %d\n", arg0, arg1); }'

返回值:

bpftrace -e 'kretprobe:ib_umem_get { printf("ib_umem_get returned %d\n", retval); }'

多个函数

执行:bpftrace test.bt
test.bt内容:

#!/usr/bin/env bpftrace// 跟踪函数 func1,并打印前四个参数
kprobe:func1
{printf("func1 called with args: %d %d %d %d\n", arg0, arg1, arg2, arg3);
}// 跟踪函数 func2,并打印前四个参数
kprobe:func2
{printf("func2 called with args: %d %d %d %d\n", arg0, arg1, arg2, arg3);
}

用户态

bpftrace -e 'uprobe:/path/to/my/exec:test_esec { printf("test_esec started\\n"); }'

so等无法直接访问

if语句

bpftrace -e 'uprobe:/path/to/my/exec:test_esec { if (comm == "exec") {printf("test_esec started\\n"); }}'

查看支持的观测点

bpftrace -l

可以用grep部分头部,进而设置更多观测函数,比如 bpftrace -l | grep :ib_ bpftrace -l | grep mlx5_ib_ 等。

其他

  • 访问参数字符串:printf("%s", str(arg1)); 根据arg1是否是指针可能需要转换
  • 根据参数偏移访问:`printf(“%s”, str(*(arg1+100)));``
  • 根据每种应用写bt脚本,既有app,也有kernel,观测效果不错
  • bt脚本观测解析arg的时候要注意偏移,可以结合crash、gdb等方法。
  • crash中struct的方式 ptype -o struct xxx,gdb中struct的方式 ptype /o struct xxx。详细参考兄弟篇:https://blog.csdn.net/essencelite/article/details/132074198

参考

源码路径:https://github.com/iovisor/bpftrace.git


http://www.mrgr.cn/p/15566782

相关文章

hadoop学习---基于Hive的教育平台数据仓库分析案例(二)

衔接第一部分,第一部分请点击:基于Hive的教育平台数据仓库分析案例(一) 意向用户模块(全量分析): 需求指标: 需求一: 计期内,新增意向客户(包含自己录入的意…

[转帖]Oracle Linux 9.3 正式版发布 - Oracle 提供支持 RHEL 兼容发行版

sysin2023-11-21 上海 阅读 5 分钟 Oracle Linux 9.3 正式版发布 - Oracle 提供支持 RHEL 兼容发行版 Oracle Linux with Unbreakable Enterprise Kernel (UEK) & Red Hat compatible kernel (RHCK) 请访问原文链接:https://sysin.org/blog/oracle-linux-9/,查看最新版。…

智启算力平台基本操作

智启算力平台 智启算力平台路径搭载数据集搭载镜像配置 智启算力平台 开发文档 帮助文档 - OpenI - 启智AI开源社区 路径搭载 OpenIOSSG/promote: 启智AI协作平台首页推荐组织及推荐项目申请。 - notice/Other_notes/SDKGetPath.md at master - promote - OpenI - 启智AI开…

【RT-DETR有效改进】 主干篇 | 2024.5全新的移动端网络MobileNetV4改进RT-DETR(含MobileNetV4全部版本改进)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是MobileNetV4,其发布时间是2024.5月。MobileNetV4是一种高度优化的神经网络架构,专为移动设备设计。它最新的改动总结主要有两点&…

IOS离线打包uniapp的信息时报错如下的解决方法

IOS离线打包uniapp的信息时报错如下的解决方法 问题描述: Extract app intents metadata 0.1 seconds XExtractAppIntentsMetadata(in target HBuilder from project HBuilder-Hello)cd /Users/whb/space/vpt/vptios/HBuilder-Hello/Applications/Xcode.app/Conte…

win10下,svn上传.so文件失败

问题:win10下使用TortoiseSVN,svn上传.so文件失败 解决:右键,选择Settings,Global ignore pattern中删除*.so,保存即可。

项目经理【过程】概念

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 【人】绩效 【过程】概念 一、过程是什么 1.1 项目管理五大过程组 1.2 五大过程组之间的相互作用 1.3 项目阶段VS过…

使用图网络和视频嵌入预测物理场

文章目录 一、说明二、为什么要预测?三、流体动力学模拟的可视化四、DeepMind神经网络建模五、图形编码六、图形处理器七、图形解码器八、具有不同弹簧常数的轨迹可视化九、预测的物理编码和推出轨迹 一、说明 这是一篇国外流体力学专家在可视化流体物理属性的设计…

聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?

前言 本质上,中间件类也是一个普通的 .NET 类,它不需要继承任何父类或者实现任何接口。 但是有几个约定: 需要有一个构造方法构造方法至少要有一个 RequestDelegate 类型的参数,用来指向下一个中间件。需要定义一个名字为 Invo…

Linux 认识与学习Bash——3

在Linux bash中&#xff0c;数据流重定向是指将命令的输出从默认的标准输出&#xff08;通常是终端&#xff09;重定向到其他位置&#xff0c;如文件或另一个命令的输入。这是通过使用特定的符号来实现的。例如&#xff0c;>用于将输出重定向到文件&#xff0c;而<用于将…

使用excel合理整理数据

使用excel合理整理数据 Excel函数LOOKUP把两个sheet数据关联起来LOOKUP函数 Excel函数LOOKUP把两个sheet数据关联起来 LOOKUP函数 需求场景 1、sheet1是视频的数据比如 aid、作者、视频信息 2、sheet2是视频的播放数据比如 aid vv uv等 做的就是根据1、2 的aid 将 sheet2中的所…

翻译《The Old New Thing》 - What is the deal with the ES_OEMCONVERT flag?

What is the deal with the ES_OEMCONVERT flag? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20050719-12/?p34893 Raymond Chen 在 2005年07月19日 ES_OEMCONVERT 标志是怎么回事&#xff1f; 简要 文章讨论了 ES_OEMCONVERT 编辑控件风格的起源和用途…

深入剖析Tomcat(七) 日志记录器

在看原书第六章之前&#xff0c;一直觉得Tomcat记日志的架构可能是个“有点东西”的东西。在看了第六章之后呢&#xff0c;额… 就这&#xff1f;不甘心的我又翻了翻logback与新版tomcat的源码&#xff0c;额…&#xff0c;日志架构原来也没那么神秘。本篇文章先过一遍原书内容…

使用FastGPT+OneAPI在本地使用Llama3

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&#xff01;他的重要特点就是工作流编排。 工作流编排&#xff1a;基于 Flow 模块的工作…

《Fundamentals of Power Electronics》——示例:Buck-Boost转换器模型变为正则形式

为了说明正则电路模型推导的步骤&#xff0c;让我们将buck-boost转换器的等效电路操作成规范形式。buck-boost转换器的一个小信号交流等效电路如下图所示。 为了将上图所示网络转换成正则形式&#xff0c;需要将所有独立源d(t)转换到左侧&#xff0c;而将所有电感转换到右侧与变…

Docker的数据管理、网络通信和dockerfile

目录 一、Docker的数据管理 1. 数据卷 1.1 数据卷定义 1.2 数据卷配置 2. 数据卷容器 2.1 创建数据卷容器 2.2 使用--volume-from来挂载test1 二、端口映射 三、容器互联 1. 创建容器互联 2. 进入test2测试&#xff08;ping 容器名/别名&#xff09; 四、Docker镜…

C#语言入门

一、基础知识 1. 程序语言是什么 用于人和计算机进行交流&#xff0c;通过程序语言让计算机能够响应我们发出的指令 2. 开发环境 IDE&#xff0c;集成开发环境。它就是一类用于程序开发的软件&#xff0c;这一类软件一般包括了代码编辑、编译器、调试器、图形用户界面等等工…

Pycharm远程同步的mapping与sync

用Pycharm进行项目远程部署的时候会遇到两个同步文件&#xff0c;一个是点击 tools—>deployment—>configration——>mapping 一个是链接虚拟环境的时候会有一个sync&#xff0c;那么这两种同步有什么区别呢&#xff1f; 区别就是&#xff0c;2包括1&#xff0c;要用…

python abs函数怎么用

abs()函数是Python的数字函数&#xff0c;用以返回数字的绝对值。 语法 以下是 abs() 方法的语法&#xff1a; abs( x ) 参数 x -- 数值表达式&#xff0c;可以是整数&#xff0c;浮点数&#xff0c;复数。 返回值 函数返回 x&#xff08;数字&#xff09;的绝对值&#x…

Python基础详解二

一&#xff0c;函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现某个功能的代码段 def myMethod(data):print("数据长度为",len(data))myMethod("dsdsdsds") 函数的定义&#xff1a; def 函数名(传入参数):函数体return 返回值 def m…