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

学会使用perf性能分析工具(含移植到arm-linux开发板) 学会使用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

Linux perf:系统性能监控和分析工具 Linuxperf是 Linux 2.6+ 后内置于内核源码树中的性能剖析(profiling)工具,它基于事件采样,以性能事件为基础,针对 CPU 相关性能指标与操作系统相关性能指标进行性能剖析,可用于性能瓶颈查找与热点代码的定位。包含在 Linux 内核tools/perf下,通过命令perf实现一组子命令:stat , record , report ,[…] 阅读详情

相关推荐

NXP i.MX图形SDK跨平台构建实战:从环境搭建到项目部署

在嵌入式图形应用开发中,跨平台构建是提升开发效率、保证代码一致性的关键技术。其核心原理在于通过统一的构建系统和抽象层,将不同目标平台(如Android、Linux、Yocto)的编译、链接和打包过程自动化。这项技术的价值在于,它让开发者能够专注于应用逻辑本身,而非繁琐的环境适配,从而显著缩短开发周期并减少平台差异导致的Bug。在实际应用中,无论是车载信息娱乐系统、工业HMI界面还是智能家居交互面板,都需要在多种硬件和操作系统上运行。NXP i.MX图形SDK提供的构建工具链,正是解决这一挑战的利器,它通过F

weixin_33806300的博客 446

perf 性能调试

perf 安装与使用

mightbxg的博客 1161

i.MX 8/8X异构计算平台:硬件虚拟化、多显示与OpenVX视觉加速实战

在嵌入式系统开发中,异构计算架构通过集成不同类型的处理核心(如CPU、GPU、DSP),实现了计算资源的专业化分工与高效协同,从而在性能、功耗和实时性之间取得平衡。其核心原理在于利用硬件虚拟化技术,在单颗SoC上创建多个隔离的安全域,允许不同的操作系统和任务独立运行,确保了系统的可靠性与功能安全。这种技术为工业控制、车载信息娱乐和边缘AI视觉等复杂场景提供了关键价值。具体到应用层面,多显示控制器支持离线合成与多路独立输出,能够驱动复杂的多屏人机交互界面;而OpenVX硬件加速框架则能自动将视觉算法计算图调度

cuifan5176的博客 908

C++ 之 perf+火焰图分析与Debug

perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。利用perf剖析程序性能时,需要指定当前测试的性能时间。性能事件是指在处理器或操作系统中发生的,可能影响到程序性能的硬件事件或软件事件perf list主要是用于列出有哪些可用的event,可以供来分析。,其中可以列出 hard ware 的event, sw 是software的event, 其它类似。hw/hardware显示支持的硬件事件相关,如: perf list hardware。

lovely_yoshino的博客 6340

i.MX 8M系列异构计算与多媒体加速:智能边缘设备开发实战指南

在嵌入式系统与物联网领域,异构计算架构通过整合不同类型处理核心(如CPU、GPU、协处理器)来协同处理任务,旨在提升能效比与实时性。其核心原理是让合适的计算单元执行擅长的任务,例如用高性能核心运行复杂操作系统与应用,用低功耗协处理器处理实时传感与电源管理。这种架构的技术价值在于能显著降低系统功耗、增强实时响应能力,并支持复杂的本地多媒体处理与机器学习推理。它广泛应用于智能家居、工业物联网、音视频设备等边缘计算场景。本文以NXP i.MX 8M系列应用处理器为例,深入剖析其Cortex-A53与Cortex-

cuifan5176的博客 414

i.MX平台GPU性能优化:从Vivante架构到NXP Demo框架实战

在嵌入式图形开发领域,GPU性能优化是提升应用流畅度和系统效率的核心。其原理在于深入理解GPU硬件架构与驱动机制,通过优化渲染管线、内存访问和资源管理来减少瓶颈。这项技术的价值在于,它能在资源受限的嵌入式平台上(如NXP i.MX系列)实现更复杂的图形效果和更高的帧率,直接关系到产品的用户体验和功耗控制。其应用场景广泛覆盖汽车仪表盘、工业HMI和智能家居中控等嵌入式图形界面。本文聚焦于**Vivante GPU**架构的特定优化点,并结合**NXP Demo框架**的工程实践,系统阐述了从几何体提交、纹理内

liudaoru - 悟 416

Perf 简介 性能调试工具

Perf 简介Perf 是用来进行软件性能分析的工具。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。最初的时候,它叫做 Performance counter,在 2.6.31 中第一次亮相。...

linux_vae的专栏 1034

NXP i.MX GPU驱动环境变量实战指南:从调试到性能优化

在嵌入式图形开发中,GPU驱动是连接应用与硬件的关键底层软件,其行为直接影响渲染性能与稳定性。驱动通过环境变量(Environment Variables)提供了一套灵活的运行时配置接口,允许开发者在不修改代码的情况下,动态调整内存管理、多核调度、渲染流水线等核心行为。这一机制对于解决图形应用中的花屏、卡顿、负载不均等“玄学”问题具有重要技术价值,尤其在工业HMI、车载仪表等对可靠性与性能要求严苛的场景中。本文聚焦于NXP i.MX系列平台的GPU驱动,深入解析如何组合使用FB_IGNORE_DISPLAY

weixin_30882895的博客 388

NXP i.MX8系列平台开发讲解 - 3.2.1 掌握性能分析工具Perf (一)

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

hywelstar的嵌入式软件开发笔记 1896

基于i.MX8M Nano的SMARC低功耗核心板设计与实践

SMARC作为嵌入式模块化计算机的开放标准,以小尺寸、低功耗和多接口特性,为边缘计算设备的快速原型验证提供了高效载体。结合恩智浦i.MX8M Nano处理器,其14nm工艺、Cortex-A53多核与NPU加速单元,在有限功耗预算内实现了AI推理与实时控制的平衡。围绕硬件设计中的电源树、LPDDR4布局及软件层面的内核调优、Suspend/Resume机制,文章系统梳理了将整机平均功耗压至1W以内的工程实践,并解析了常见调试陷阱。面向边缘AI盒子、工业HMI等场景,SMARC与i.MX8M Nano的组合展

weixin_34127717的博客 1721

i.MX 8X异构计算与EdgeLock安全在汽车与工业边缘网关中的应用

异构计算架构通过整合不同架构的计算核心(如Arm Cortex-A与Cortex-M系列),让合适的核心处理合适的任务,实现了应用处理与实时控制的功能隔离与性能优化,从而提升了系统的确定性和可靠性。这一原理在需要高实时性、高可靠性的边缘计算场景中具有重要技术价值,尤其适用于汽车域控制器和工业物联网网关。在这些场景中,系统不仅需要处理复杂的应用逻辑和人工智能推理,还必须满足严格的功能安全与信息安全要求。i.MX 8X处理器正是基于此理念,其集成的EdgeLock安全子系统为构建可信的硬件信任根提供了坚实基础,

cuifan5176的博客 410

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

从上面这个例子查看,cvtsi2sdq指令:将整数转换为双精度浮点数。comisd指令:比较两个双精度浮点数。减少不必要的浮点数转换:检查算法是否可以优化,减少或避免浮点数的使用。并行化计算:如果可能,可以使用多线程或SIMD指令集来并行处理这些计算任务。在实际开发过程中,优化也需要去查看自身的代码涉及性能相关的问题,一般来说通过perf 工具可以轻松的找到相关的问题,另外还可以通过生成火焰图进行更加直观得找到问题的位置。

hywelstar的嵌入式软件开发笔记 883

i.MX 95嵌入式Linux开发:USB-C PD供电配置与DDR性能监控实战

在嵌入式系统开发中,电源管理与性能监控是保障系统稳定高效运行的两大基石。电源管理通过精确控制供电电压与电流,确保硬件在最佳状态下工作,直接影响系统功耗与可靠性;而性能监控则借助硬件性能计数器等机制,实时剖析内存访问、CPU负载等关键指标,为性能调优提供数据支撑。这两项技术的核心价值在于,它们共同决定了嵌入式设备在复杂应用场景下的综合表现,尤其在边缘计算、工业网关等对能效和实时性要求严苛的领域。本文以NXP i.MX 95平台为例,深入解析如何通过设备树(DTS)灵活配置USB Type-C Power De

weixin_30368405的博客 176

i.MX8M Mini核心板模组:I/O资源解析与底板开发实操指南

在嵌入式产品开发中,核心板与底板分离的设计模式正成为缩短研发周期、降低硬件风险的关键方案。核心板将DDR、电源树、复杂高速布线等高风险部分预先集成,开发者只需聚焦底板功能扩展与系统适配。i.MX8M Mini作为一款异构应用处理器,集成四核Cortex-A53与Cortex-M4,对外提供MIPI-DSI、千兆以太网、USB、PCIe、多路UART/I2C/SPI等丰富I/O资源。理解其引脚复用、电气特性与启动流程,是进行Linux设备树配置与BSP裁剪的基础。本文从核心板选型逻辑出发,解析i.MX8M M

weixin_30600197的博客 331

基于i.MX平台的车载信息娱乐系统Linux解决方案构建与优化

嵌入式Linux系统以其开源、灵活和生态丰富的特点,已成为中高端智能设备的核心软件平台。其原理在于通过定制化的内核与根文件系统,实现对特定硬件资源的精细化管理与调度。这一技术的核心价值在于为开发者提供了一个稳定、高效且可长期维护的基础软件栈,使其能够专注于上层应用创新与差异化体验的打造。在汽车电子领域,其对可靠性、实时性和快速启动的苛刻要求,使得基于嵌入式Linux的解决方案成为构建智能座舱系统的关键技术路径。具体到车载信息娱乐系统,通过采用如Automotive Grade Linux等经过车规验证的发行

chouchijiao8952的博客 339

2025认证杯数学建模第二阶段B题完整论文(代码齐全):谣言在社交网络上的传播

这需要我们深入理解抽样检测所得的次品率的不确定性及其对生产决策的影响。对于问题二的决策分析,我们可将其细分为四个关键的决策节点,分别是零件 1 的质量检测、零件 2 的质量检测、成品的质量检测,以及成品检测不合格时的拆解处理。该策略的实施,保证了在算法迭代过程中,表现最为优异的个体能够得到保留,并顺利传递至下一代,从而保障了算法在寻求最优解过程中的收敛性和优化效果。因此,我们采用假设检验的方法,将次品分布构造成 t 分布,从而确定在相应置信度的条件下,抽样次数 n 和次品数 k 所需满足的要求。

2301_81596622的博客 1007

夹层式SBC与i.MX8M Mini:从结构设计到工程落地全解析

单板计算机(SBC)是嵌入式系统设计的核心载体,其形态直接决定了产品的体积、散热与扩展能力。夹层式结构通过垂直堆叠核心板、显示层与接口扩展层,在有限空间内实现紧凑布局,尤其适合人机界面、边缘网关和工业控制等对功耗与稳定性要求苛刻的场景。NXP i.MX8M Mini作为一款集成四核Cortex-A53与Cortex-M4的异构应用处理器,以1.8GHz主频、低功耗和长达十余年的供货周期,成为此类SBC的理想选择。从接口评估、Yocto环境搭建到显示与VPU硬解调通,再到散热与稳定性排查,工程实践中的每个环节

weixin_30256901的博客 297

海康视觉相机驱动软件MVS参数配置全攻略(附接线图+避坑指南)

本文提供了海康视觉相机驱动软件MVS从硬件连接到软件参数配置的完整指南。详细解析了供电与通讯线缆的区分、PNP/NPN信号逻辑的接线避坑方法,并重点阐述了MVS软件中触发模式、网络IP配置、图像采集及光源控制等核心参数的设置技巧,旨在帮助用户快速完成相机调试,实现稳定高效的图像采集。

weixin_29204205的博客 389

i.MX Linux BSP深度解析:从MSL原理到驱动开发与移植实践

在嵌入式Linux开发中,板级支持包(BSP)是连接通用内核与特定硬件的关键软件层,其核心在于实现硬件抽象与驱动支持。BSP通过机器特定层(MSL)管理中断控制器、系统定时器、内存映射和引脚复用等底层硬件资源,为上层应用提供稳定的运行基础。理解中断号映射、时钟源配置以及设备树描述等原理,对于开发稳定高效的嵌入式系统至关重要。这些技术广泛应用于工业控制、物联网网关和多媒体设备等场景。本文聚焦于NXP i.MX系列处理器的Linux BSP,深入探讨其中断控制器(GIC)和系统定时器(GPT/EPIT)等核心模

weixin_31974659的博客 251

Unity-Chan Toon Shader卡通渲染学习

2.0 (UTS2)是一款用于图像和视频的卡通着色器,旨在满足从事卡通着色 3DCG 动画的创作者的需求。二、从0-1复刻UTS21.漫反射UTS2的漫反射部分主要有三个层组成,分别是基本颜色、第一阴影色和第二阴影色,分别对应着美术理论中的白、灰、黑。

qq_63133691的博客 2537

双模音频解码器设计:USB+蓝牙LDAC平衡输出方案

音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供

weixin_42613018的博客 385

i.MX8M Plus双千兆网口SBC:边缘AI网关与工业应用实战

边缘计算正成为AI落地的重要载体,而具备NPU加速能力的嵌入式处理器则是其中的核心引擎。i.MX8M Plus作为NXP面向工业级场景的SoC,集成了四核Cortex-A55、2.3 TOPS NPU以及双千兆MAC,配合SMARC模块化载板I-Pi,构成了一套兼顾算力与网络能力的单板计算机方案。这类平台不仅支持在设备端完成轻量级模型推理,还能通过双原生网口实现数据采集、协议转换与TSN确定性通信,广泛应用于边缘AI盒子、工业网关、机器视觉等场景。本文从硬件设计、系统部署到模型转换与网络配置,系统拆解了该平

weixin_34348174的博客 387
上一篇: NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试
下一篇: NXP i.MX8系列平台开发讲解 - 5.5 调试篇 - 掌握perf 工具调试(二)
码思途远
博客等级 码龄12年 1970粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码思途远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值