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

文章目录

  • 简介
  • 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.mfbz.cn/a/601273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink 部署模式

目录 概述 部署模式 会话模式(Session Mode) 单作业模式(Per-Job Mode) 应用模式(Application Mode) 运行模式(资源管理模式) Standalone运行模式 会话模式部署 应用模式部署 Yarn运行模式 会话模式部署 单作业模式部…

pdf转word,结果为什么是图片?怎么才能转成可编辑的文字?

PDF转Word为何会变成图片?这是许多人在使用文件格式转换工具时经常遇到的问题。为了解答这个疑问,我们需要从多个方面来探讨这个问题。 首先,PDF文件本身的特点是一个重要的因素。PDF,即Portable Document Format,是一…

云计算技术发展趋势详解

云计算最全详解(图文全面总结) 云计算是技术趋势的未来,掌握它至关重要。从基础到高级,本文深入探讨云计算的方方面面,为您提供全面的理解。 云计算 云计算将计算转移到远程数据中心,让用户灵活、经济地访问资源。就像水电一样&…

激光雕刻优化:利用RLE压缩技术提高雕刻效率与节省能源成本

什么是 RLE ?RLE 在激光雕刻应用实现代码:总结 什么是 RLE ? RLE 是 Run-Length Encoding(游程长度编码)的缩写。这是一种数据压缩技术,它通过减少连续重复的数据来减小文件的大小。RLE 在图像处理、无损…

VS调试技巧

1. 什么是bug bug本意是“昆⾍”或“⾍⼦”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或 问题,简称程序漏洞。 “Bug” 的创始⼈格蕾丝赫柏(Grace Murray Hopper),她是⼀位为美国海军⼯…

C 语言文件输入/输出(I/O)函数大全

C 语言文件输入/输出(I/O)函数大全 1. fopen() 函数2. fclose() 函数3. fread() 函数4. fwrite() 函数5. fseek() 函数6. ftell() 函数7. rewind() 函数8. feof() 函数9. ferror() 函数10. clearerr() 函数 😊 C 语言文件输入/输出&#xf…

gradio图像复原界面改进

图像复原界面展示需要输入图像和复原图像在界面的清晰对比,修改两张图像为同样大小。 默认情况: intreface代码如下: interface gr.Interface(fnrestore, # 要调用的函数inputs[gr.Image(label"输入图像")], # 第一个输入&am…

AI大模型探索之路-训练篇16:大语言模型预训练-微调技术之LoRA

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

测试平台开发:Django开发实战之注册界面实现(上)

实现注册功能,大概包括以下几个步骤 1、设计ui ##字段 通过看数据库里面的user表里面的字段,可以大概知道需要几个字段: emailusernamepasswordpassword_confirm 生成简单的ui界面,复制这个html代码 然后在项目路径下面创建一…

22_Scala集合Seq

文章目录 Seq序列1.构建集合2.List集合元素拼接&&集合拼接3.可变Seq&&List3.1 ListBuffer创建3.2 增删改查3.3 相互转化 Appendix1.Scala起别名2.Seq底层3.关于运算符操作: :4.空集合的表示 Seq序列 –Seq表示有序,数据可重复的集合 1.构建集合 …

整体安全保障服务方案包括哪些方面?

整体安全保障服务方案是一套综合性的措施,旨在保护企业的网络、数据和资源免受各种威胁。主要包含检测、加固、应急保障、安全运营、攻防演练等多项核心能力与服务。 ​安全狗通过专业团队、工具以及专业运营流程,提出了新一代整体安全保障思路&#xff…

开源代码分享(28)-含分布式光伏的配电网集群划分和集群电压协调控制

参考文献: [1] Chai Y , Guo L , Wang C ,et al.Network Partition and Voltage Coordination Control for Distribution Networks With High Penetration of Distributed PV Units[J].IEEE Transactions on Power Systems, 2018:3396-3407.DOI:10.1109/TPWRS.2018…

【深度学习】实验1 波士顿房价预测

波士顿房价预测 代码 import numpy as np import matplotlib.pyplot as pltdef load_data():# 1.从文件导入数据datafile D:\Python\PythonProject\sklearn\housing.datadata np.fromfile(datafile, sep )# 每条数据包括14项,其中前面13项是影响因素&#xff0c…

长方形盒子能容纳定宽的长方形物体最大长度

问题 已知长方形盒子长度a和宽度b,放入一宽度w的长方形物体,求长方形物体最大长度L。 答案 MS Excel公式如下(其中B1a,B2b,B3w): L SQRT(B1^2B2^2)-B1*B2*B3*2/(B1^2B2^2)注意 当求得 L ≤…

时间复杂度与空间复杂度(上篇)

目录 前言时间复杂度 前言 算法在运行的过程中要消耗时间资源和空间资源 所以衡量一个算法的好坏要看空间复杂度和时间复杂度, 时间复杂度衡量一个算法的运行快慢 空间复杂度是一个算法运行所需要的额外的空间 一个算法中我们更关心的是时间复杂度 时间复杂度 时…

使用idea管理docker

写在前面 其实idea也提供了docker的管理功能,比如查看容器列表,启动容器,停止容器等,本文来看下如何管理本地的docker daemon和远程的dockers daemon。 1:管理本地 双击shift,录入service: …

24年审计师报名时间汇总所需材料提前准备

2024审计师报名本周开始(5月10日起),各地报名时间不一,报名指南整理好了! ✅全国报名时间汇总报名费用资格审核:P1~P2。 ✅2024年审计师考试科目: 《审计相关基础知识》和《审计理论与实务》 ✅…

如何创建微信小程序?只需3步完成小程序制作

微信,中国最大的社交媒体应用程序,几个月前推出了微信小程序,这一神奇的功能立即大受欢迎。这些小程序让在中国注册的商业实体所有者创建一个小程序来与微信用户互动。这些小程序不需要在用户手机上进行任何安装,只需通过微信应用…

HP Z620 服务器打开VTx虚拟技术

在使用Virtual Box的时候,虚拟主机启动报错:提示需要VTx。于是到bios里面去设置VTx。 这里有个小坑,就是HP 的bios配置里面,VTx不在常规的“System Configuration”、“Advanced”等地方,而是在“Security”菜单里&…

关于2024年上半年软考考试批次安排的通告

按照《2024年计算机技术与软件专业技术资格(水平)考试工作安排及有关事项的通知》(计考办〔2024〕1号)文件精神,结合各地机位实际,现将2024年上半年计算机软件资格考试有关安排通告如下: 一、考…
最新文章