Xilinx Vitis TCF Profiler性能剖析器应用
介绍
- Profiling是一种确定应用程序在哪里花费时间的技术。目的是帮助用户直观的观察到程序运行期间各个函数的运行时间占比,从而帮助用户优化提高程序运行的效率。
- TCF Profiler支持对standalone和 Linux 应用进行剖析。构建应用时,TCF Profiler无需设置任何其它编译器标志。首先通过调试接口进行“程序计数器 (Program Counter)”采样,随后基于采样通过JTAG进行独立应用剖析。原理是周期性的采样PC寄存器的值,存入一个表中,然后将该表与目标代码进行反向映射,从而确定在采样时刻运行的是哪一个函数或者程序。 禁用栈追踪时,它并不会更改程序执行流程,属于非侵入式操作。启用栈追踪时,由于调试器必须收集栈追踪信息,因此会减缓程序执行速度。
调试步骤(基于Vitis2022)
-
选择您要剖析的应用。
-
右键单击应用并依次选择“Debug As”→“Launch on Hardware (Single Application Debug)“。
-
当应用止步于 main 时,依次选择“Window” → “Show View” → “Debug” → “TCF Profiler”以打开 TCF 剖析器视图。
-
如图单击红框中的按钮以启动剖析。这样会显示“剖析器配置 (Profiler Configuration)”页面。
-
选择“Aggregate Per Function”选项以将针对不同地址收集的所有样本都组合到单一函数内。禁用该选项时,收集的样本会按地址来显示。
-
选择“Enable stack tracing”选项以显示样本数据中每个地址的栈跟踪。要查看地址的栈追踪,请单击剖析器视图中的对应地址条目。
-
指定“Max stack frames count”以设置显示栈追踪视图中显示的最大帧数。
-
指定“View update interval”,以设置TCF 剖析器视图更新并显示新结果的时间间隔(以毫秒为单位)。请注意,此时间间隔不同于收集剖析样本的时间间隔。
-
开始Debug应用。剖析器将更新并显示数据,如下图所示。
Address: 代表函数在内存中的位置
%Exclusive: 独占时间是纯粹在该函数上花费的时间占比,不包括在子函数上花费的时间.
%Inclusive: 非独占时间是指在程序运行期间函数本身和所有子函数中花费的时间占比。
Function: 采样到的函数名称
File: 采样到函数所在的文件
Line: 函数在文件中的行号 -
当启用栈追踪模式(Enable Stack Tracing)时:点击对应函数会在Called From和Child
Calls中显示函数的调用关系,并且显示调用函数所占用的时间占比。如下图:
-
当禁用Aggregate Per Function也就是不勾选Aggregate Per Function选项时,剖析结果如下:
结论:通过勾选与不勾选Aggregate Per Function选项可以看到,如果不勾选在一个函数内的多个采样会按照采样地址来进行显示,如果勾选了会把函数内的所有采样合并到一个函数内进行显示。
参考文档:
ug1400-vitis-embedded.pdf