NXP i.MX8系列平台开发讲解 - 5.4 调试篇 - 掌握perf 工具调试(一)

专栏文章目录传送门:返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


文章目录

目录

掌握perf 工具调试(一)

1. Perf 工具介绍

1.1 Perf 工作原理

1.2 Perf 工具基本功能

2. Perf 安装和基本使用

2.1 perf list

2.2 perf probe

2.3 perf stat

2.4 perf record/report

2.5 perf annotate

2.6 perf top

3. 总结


掌握perf 工具调试(一)

在作为一个嵌入式软件工程师中,置身于Linux 当中,无论在在做系统方面还是应用方面,满足了基本功能需求,后期还需要去考量性能方面的问题,需要考虑自身添加的部分是否带来一些隐患,或者起到一定的优化,结构代码设计是合理等。

对于性能分析工具目前有很多种如下图,做过性能分析都看过这张图,本章节主要介绍Perf工具;

1. Perf 工具介绍

Perf(Performance Analysis Tools for Linux)是一个功能强大且灵活的性能分析工具,主要用于 Linux 系统中的性能调优和分析。它能够帮助开发者深入了解系统和应用程序的性能瓶颈,并提供详细的分析报告。作为嵌入式软件工程师,掌握和使用 Perf 工具可以显著提升开发效率和产品性能。

Perf 主要包含两个部分:

  • perf 命令,用户空间的应用程序

  • perf_events ,Linux 内核中的一个子系统

perf 命令

Perf 命令是一个用户空间工具,具备 profiling、tracing 和脚本编写等多种功能,是内核子系统 perf_events 的前端工具。通过 perf 命令,用户可以设置和操作内核子系统 perf_events,完成系统性能数据的收集和分析。

perf_events 子系统:

内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持。它采用事件驱动的方式,通过收集特定事件(如 CPU 时钟周期、缓存未命中等)来跟踪和分析系统性能。perf_events 于 2009 年被合并到 Linux 内核源代码中,成为内核的一个子系统。

1.1 Perf 工作原理

Perf 工具依赖于硬件性能计数器(Performance Monitoring Unit, PMU),这些计数器存在于现代 CPU 中,用于跟踪和记录各种硬件事件,如 CPU 周期、缓存命中/未命中、分支预测命中/未命中等。

工作过程:

  • 用户通过输入perf命令进行设置相关的需要的时间类型;

  • perf 定制读取计数器的值,获取采用数据,并将存放在ring bufferr中;

  • 用户通过perf report 和 perf script 从ring buffer 中读取数据生成分析报告。

perf工具是一个功能强大且灵活的性能分析工具。它提供了多种功能。首先,perf可以用于收集各种系统性能数据,包括CPU利用率、内存使用情况、磁盘IO、网络传输等等。通过收集和分析这些数据,可以了解系统的瓶颈和性能瓶颈,并针对性地进行优化。

1.2 Perf 工具基本功能

事件采集:Perf 能够捕获各种硬件和软件事件,包括 CPU 周期、缓存命中/未命中、中断、系统调用等。

统计分析:对采集到的事件进行统计分析,生成性能报告。

热点分析:通过分析程序执行中的热点代码,定位性能瓶颈。

跟踪和测量:可以对系统调用、上下文切换、任务调度等进行详细跟踪和测量。

火焰图:生成可视化的火焰图,帮助开发者直观地理解性能问题。

2. Perf 安装和基本使用

在ubuntu 系统直接安装命既可:

sudo apt-get install linux-tools-common linux-tools-generic linux-tools-$(uname -r)

假如是在嵌入式设备中,需要内核配置支持:

CONFIG_PERF_EVENTS=y

命令结构:

perf <command> [options] [arguments]

常用的命令语法:

#
perf stat 

2.1 perf list

perf list 该命令列出特定机器上可用的性能事件。不同电脑配置可能存在不一样的差异。

perf list
# 硬件事件
perf list hw
# 软件事件
perf list sw

事件类型一般有三种:

  • Hardware events: 硬件事件是直接由处理器性能监视单元(PMU)提供的数据,通常用于分析处理器内部行为,比如L2 缓存命令等;

  • Software events : 软件事件由内核提供,用于跟踪操作系统级别的活动。

  • Hardware cache events: 这些事件专门用于分析不同层次缓存的性能。

  • Kernel PMU events : 内核 PMU 事件由内核性能监视单元提供,专用于分析内核级别的行为。

2.2 perf probe

perf probe 允许用户动态地向正在运行的内核或用户空间应用程序中插入探针(probe)。这些探针可以用于监控特定函数的调用,记录函数的参数值和返回值等,用于性能分析和调试。perf probe 可以帮助开发人员深入了解程序的运行行为,从而识别和优化性能瓶颈。

perf probe [<options>] <probe-point> [<probe-point> ...]
​
# 例子:添加一个探针,在do_sys_open入口插入一个
perf probe do_sys_open
# 带参数的探针
perf probe 'do_sys_open filename'
​
# 查看已经添加的探针
perf probe -l
​
# 删除探针
perf probe -d do_sys_open
​
# 使用探针进行性能分析
# 例子:在系统运行 10 秒钟内记录 do_sys_open 函数的调用,并生成一份性能报告
perf record -e probe:do_sys_open -aR sleep 10
perf report

2.3 perf stat

perf stat 命令执行指定的命令,对命令执行期间发生的硬件和软件事件进行持续计数,并生成这些计数的统计数据。

Usage: perf stat [<options>] [<command>]
​
# 命令perf stat -p <pid>可以采集某一个进程的运行信息
perf stat -p 344
​
# 例子: zero文件读取输入写到空设备中,连续写888888个block:
perf stat -B dd if=/dev/zero of=/dev/null count=888888

2.4 perf record/report

perf record 命令进行采集数据,把数据写入数据文件从,后续可以通过perf report命令对数据进行分析。

perf stat 
​
# 例子:用1000统计频率,统计一个sleep 5秒过程中
perf record -a -F 1000 sleep 1
perf report

2.5 perf annotate

perf annotate 命令主要读取perf.data文件(由perf record命令创建)并显示注释后的代码。 可以去展现源代码和汇编代码的对应关系,帮助开发者找到性能瓶颈和热点代码。

 Usage: perf annotate [<options>]# 注释汇编代码
perf annotate -i perf.data

2.6 perf top

perf top 是一个实时性能监控工具,类似于 top 命令,但专注于性能事件。它能够实时显示系统中消耗 CPU 周期最多的函数和代码段,帮助开发者快速定位性能瓶颈。

perf top [<options>]# 监控指定进程的性能事件
perf top -p 12345# 监控指定用户的性能事件
perf top -u john# 监控特定事件
perf top -e cycles

3. 总结

本章节主要对Perf 的基本定义还有一些功能进行一个了解,主要用于在开发工程中调试,优化有一定的作用,下一个章节将以实际例子进行如何去使用它,分析开发过程中遇到的问题。

参考:

Linux Performance

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498535.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实际部署Dify可能遇到的问题:忘记密码、开启HTTPS、知识库文档上传的大小限制和数量限制

背景 前面我们以 docker compose 容器化的方式本地部署了 Dify 社区版&#xff0c;并快速体验了其聊天助手、工作量编排以及智能体&#xff08;Agent&#xff09;功能。不过后续实际生产环境使用时遇到了忘记密码、如何开启SSL以支持HTTPS、如何突破知识库文档上传的大小限制和…

Python 青铜宝剑十六维,破医疗数智化难关(上)

一、医疗数智化困境剖析 在当今数智化浪潮的席卷下&#xff0c;医疗行业正经历着深刻变革&#xff0c;医疗数智化转型已成为不可阻挡的趋势。它将现代信息技术深度融入医疗的各个环节&#xff0c;从电子病历的广泛普及&#xff0c;实现医疗信息的便捷存储与快速查阅&#xff0…

Kafka 性能提升秘籍:涵盖配置、迁移与深度巡检的综合方案

文章目录 1.1.网络和io操作线程配置优化1.2.log数据文件刷盘策略1.3.日志保留策略配置1.4.replica复制配置1.5.配置jmx服务1.6.系统I/O参数优化1.6.1.网络性能优化1.6.2.常见痛点以及优化方案1.6.4.优化参数 1.7.版本升级1.8.数据迁移1.8.1.同集群broker之间迁移1.8.2.跨集群迁…

易基因: BS+ChIP-seq揭示DNA甲基化调控非编码RNA(VIM-AS1)抑制肿瘤侵袭性|Exp Mol Med

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 肝细胞癌&#xff08;hepatocellular carcinoma&#xff0c;HCC&#xff09;早期复发仍然是一个具有挑战性的领域&#xff0c;其中涉及的机制尚未完全被理解。尽管微血管侵犯&#xff08…

代码随想录算法【Day7】

DAY7 454.四数相加II 特点&#xff1a; 1.只用返回元组的个数&#xff0c;而不用返回具体的元组 2.可以不用去重 暴力思路&#xff1a;遍历&#xff0c;这样时间复杂度会达到O(n^4) 标准思路&#xff1a;用哈希法&#xff08;场景&#xff1a;在一个集合里面判断一个元素…

[TOTP]android kotlin实现 totp身份验证器 类似Google身份验证器

背景&#xff1a;自己或者公司用一些谷歌身份验证器或者microsoft身份验证器&#xff0c;下载来源不明&#xff0c;或者有广告&#xff0c;使用不安全。于是自己写一个&#xff0c;安全放心使用。 代码已开源&#xff1a;shixiaotian/sxt-android-totp: android totp authenti…

Type c系列接口驱动电路·内置供电驱动电路使用USB2.0驱动电路!!!

目录 前言 Type c常见封装类型 Type c引脚功能详解 Type c常见驱动电路详解 Type c数据手册 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路…

【竞技宝】LOL:IG新赛季分组被质疑

北京时间2024年12月31日&#xff0c;今天已经2024年的最后一天&#xff0c;在进入一月之后&#xff0c;英雄联盟将迎来全新的2025赛季。而目前新赛季第一阶段的抽签结果已经全部出炉&#xff0c;其中人气最高的IG战队在本次抽签中抽到了“绝世好签”引来了网友们的质疑。 首先介…

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话 最近一篇文章还是在11月30日写的&#xff0c;好长时间没有打卡了。最近工作上的事情特别多&#xff0c;主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed&#xff0c;后续会带来一些分享。今天的文章主要聚焦在RAG。 近期调研了一系…

Prompt工程--AI开发--可置顶粘贴小工具

PROMPT 1.背景要求&#xff1a;我需要开发一个简单的粘贴小工具&#xff0c;用于方便地粘贴和管理文本内容。该工具需要具备以下功能&#xff1a;粘贴功能&#xff1a;提供一个文本框&#xff0c;用户可以粘贴内容。窗口置顶&#xff1a;支持窗口置顶功能&#xff0c;确保窗口…

FPGA自学之路:到底有多崎岖?

FPGA&#xff0c;即现场可编程门阵列&#xff0c;被誉为硬件世界的“瑞士军刀”&#xff0c;其灵活性和可编程性让无数开发者为之倾倒。但谈及FPGA的学习难度&#xff0c;不少人望而却步。那么&#xff0c;FPGA自学之路到底有多崎岖呢&#xff1f; 几座大山那么高&#xff1f;…

它真的可以绕过 ICloud 激活吗

作为最著名的越狱辅助应用程序之一&#xff0c;3u工具 非常出色地将各种越狱工具和功能集成到一个应用程序中。除了越狱之外&#xff0c;3u工具 有时也被认为是 iCloud 激活锁绕过工具。 但3u工具真的能绕过激活锁吗&#xff1f; 如果没有的话还有其他的应用吗&#xff1f; 这…

手写顺序流程图组件

效果图 完整代码 <template><div><div class"container" :style"{ width: ${spacingX * (colNum - 1) itemWidth * colNum}px }"><divv-for"(item, i) in recordList":key"i"class"list-box":style&…

SimForge HSF 案例分享|复杂仿真应用定制——UAVSim无人机仿真APP(技术篇)

导读 「神工坊」核心技术——「SimForge HSF高性能数值模拟引擎」支持工程计算应用的快速开发、自动并行&#xff0c;以及多域耦合、AI求解加速&#xff0c;目前已实现航发整机数值模拟等多个系统级高保真数值模拟应用落地&#xff0c;支持10亿阶、100w核心量级的高效求解。其低…

揭秘文件上传漏洞之操作原理(Thoughts on File Upload Vulnerabilities)

从上传到入侵&#xff1a;揭秘文件上传漏洞之操作原理 大家好&#xff0c;今天我们来聊一个"老而弥坚"的漏洞类型 —— 文件上传漏洞。虽然这个漏洞存在很多年了&#xff0c;但直到现在依然频频出现在各种漏洞报告中。今天我们就来深入了解一下它的原理和各种校验方…

网络安全 | 云安全与物联网(IoT)

网络安全 | 云安全与物联网&#xff08;IoT&#xff09; 一、前言二、云计算与物联网概述2.1 云计算2.2 物联网 三、物联网中的云安全需求与挑战3.1 数据安全3.2 网络安全3.3 身份认证与访问控制3.4 设备安全 四、云安全在物联网中的应对策略4.1 技术层面4.2 管理层面 五、案例…

FFmpeg:详细安装教程与环境配置指南

FFmpeg 部署完整教程 在本篇博客中&#xff0c;我们将详细介绍如何下载并安装 FFmpeg&#xff0c;并将其添加到系统的环境变量中&#xff0c;以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户&#xff0c;这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…

基于Redis有序集合实现滑动窗口限流

滑动窗口算法是一种基于时间窗口的限流算法&#xff0c;它将时间划分为若干个固定大小的窗口&#xff0c;每个窗口内记录了该时间段内的请求次数。通过动态地滑动窗口&#xff0c;可以动态调整限流的速率&#xff0c;以应对不同的流量变化。 整个限流可以概括为两个主要步骤&a…

C++——deque的了解和使用

目录 引言 标准库中的deque 一、deque的基本概念 二、deque的常用接口 1.deque的迭代器 2.deque的初始化 3.deque的容量操作 3.1 有效长度和容量大小 3.2 有效长度和容量操作 4.deque的访问操作 5.deque的修改操作 三、deque的应用场景 结束语 引言 在C中&#x…

【蓝桥杯】:蓝桥杯之路径之谜

题目分析 这是一道路径谜题&#xff0c;描述了一个骑士在一个(n\times n)方格组成的城堡中行走的问题。骑士从西北角&#xff08;入口&#xff09;走到东南角&#xff08;出口&#xff09;&#xff0c;可以横向或纵向移动&#xff0c;但不能斜着走&#xff0c;也不能跳跃。每走…