专栏文章目录传送门:返回专栏目录
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