perf作为linux下性能分析的利器,对比其他类似功能的软件具有特定的优势,例如免费,对应用程序性能影响小等等,使用比较广泛。但是在嵌入式linux开发时,为了分析应用程序的性能,在嵌入式环境直接使用perf工具有些限制。例如flash空间小,无法存储较大的程序。这个时候交叉分析就很有必要了,即在嵌入式环境采集数据,在PC环境下查看和分析数据。这样可以利用PC下的高性能CPU和大硬盘容量,使用更为高级的分析工具。
以我的环境为例,嵌入式为ARM64的CPU,原生linux操作系统,而交叉编译的PC为intel X64 CPU,ubuntu操作系统,使用同一个PC进行性能数据分析。
包含以下几个步骤:
1、为了分析嵌入式环境应用程序的性能,首先要采集数据,因此需要在嵌入式环境上安装基本的perf程序。
2、执行perf,统计采样数据。样例里面是采集已经启动的程序。也可以从头启动程序进行采集。-g参数是为了画出调用图。程序结束后,会在执行目录下生成采集结果文件perf.data
3、将文件perf.data拷贝到PC环境下
4、在perf.data目录下执行perf report进行查看
这里需要注意的是,和本机编译执行的程序不同,因为是交叉编译的,因此应用程序真正使用的库是交叉编译工具链里面的库,而且反汇编工具也不是X64的,而是ARM64的工具,因此需要通过--symfs指定工具链文件系统的根目录在本机的位置,通过--objdump参数设定反汇编的工具。样例中我新建了一个目录symbols并且将编译工具链的目录拷贝到了该目录下。
5、通过结果进一步分析性能热点进行相关优化。
FAQ:
1、aarch64-linux-gnu-objdump工具的安装
sudo apt install binutils-aarch64-linux-gnu