掌握性能分析工具Perf(一)(1)

作为一个嵌入式软件工程师,置身于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 周期、缓存命中/未命中、分支预测命中/未命中等。

工作过程:

1)用户通过输入perf命令进行设置相关的需要的事件类型;

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

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

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

1.2 Perf 工具基本功能

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

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

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

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

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

更多内容请看下回。

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/143372014