我们如何为Linux Perf GUI性能分析工具(Hotspot)增添一丝完美

在我们的一个项目中,我们通过开发Linux Perf GUI Profiler的新功能对其进行了改进。



客户需求可以通过所需分析器的以下特征来表达:



  • 具有针对特定体系结构的性能分析工具;
  • 能够对反汇编代码中的指令进行深入的性能分析;
  • 可以在方便的GUI中查看和处理反汇编代码的输出,以用于此类体系结构集-x86_64,ARMv7,ARMv8。


也就是说,需要一个探查器,该探查器应:



  • 跨平台
  • 能够从该集合生成用于架构功能的反汇编程序-x86_64,ARMv7,ARMv8;
  • 显示结果并通过GUI与用户交互并维护可用性。


为了满足客户的需求,我们开发了一个新的系统组件-跨平台反汇编程序,具有用于x86_64,ARMv7,ARMv8(用于处理其输出的功能和GUI)的代码生成。



让我们来看一个在Hotspot上运行的C ++代码的简单演示示例,以及该示例提供的性能分析功能。例:



cat demo.cpp:
#include <iostream>
int g (int arg) {
    return abs(rand()) * arg;
}

int f() {
    int i = 1;
    int res = 1 ;

    std::cout << abs(rand()) << std::endl;
    while (i < 1000000) {
        res += i * g(res);
        i++;
    }
    std::cout << res << std::endl;
    return res;
}

int main() {
    std::cout << f() << std::endl;
    return 0;
}


我们编译,构建演示应用程序:



 g++ demo.cpp -o demo


启动我们的探查器:



./hotspot


步骤1-收集数据并将其写入perf.data文件。



这可以通过两种方式完成-从命令行使用显式调用perf



record -o /home/demo/perf.data --call-graph dwarf ./demo


或使用热点菜单文件->记录数据。



对于我们的演示,我们收集周期类型的事件,但是您可以设置任何其他事件类型或一组事件类型(高速缓存未命中,指令,分支未命中等)。







单击开始录制,等待查看结果点亮:







进入性能分析领域。



在这里,我们将在演示运行时的消费者中找到摘要信息和支持者。







双向呼叫链-从被呼叫方到调用方方法(自下而上),反之亦然(自下而下),带有时间(权重)。















关于

其重要的功能/方法的性能和执行时间的火焰图和数据



要获取有关我们感兴趣的功能的更多详细信息,以及其中的事件分布(取决于反汇编代码的说明),请单击上下文菜单项“反汇编”。右键单击您喜欢的函数将打开它:







现在,我们知道有关此函数的所有信息!







您可以浏览调用堆栈。双击蓝色突出显示的呼叫说明。并且在我们之前是被调用函数g(int)的反汇编程序。使用CPU的指令在这里没有竞争对手。







Ctrl + B,Ctrl + D-我们还有命令的机器代码,并且反汇编程序是使用objdump生成的。在以前的情况下,显示了通过调用perf注释生成的代码。







“后退”按钮将亮起,您可以在两个方向上沿调用堆栈移动!



转到并双击地址为1236的指令,以移至地址为124f的指令。再一次,可以返回到地址为1236的指令了







Ctrl + B,Ctrl + I将我们切换到Intel Assembler语法:我们将







很高兴有机会按输入的模式搜索文本,例如,使用%rsp寄存器:







并且...而无需离开该位置,我们移至ARM ...为此,基本上,我们将需要两个实体-在ARM上构建的用户应用程序的可执行文件,以及记录在其中的perf.data文件。在我们的演示中,这些是基于ARMv8构建的coremark.1.exe和perf.1.fp.cycles.data。我们将它们放入/ home / demo / armv8 /并加载perf.data-











因此,我们不仅完成了客户设置的任务,而且还超出了他们的任务-特别是,根据反汇编程序的指令来计算和显示事件的分布情况,使我们能够对一条可以链接到代码中的字符串的指令进行深入分析,该程序具有一个GUI-用户友好界面与交叉分析设置。



通过与我们的合作伙伴达成协议,按照GNU通用公共许可证的条款分发Linux性能基准热点。换句话说,我们授予所有感兴趣的用户免费复制,修改和分发此探查程序的权利。



它与下载和安装说明一起托管在GitHub上。每个人都可以熟悉它并赞赏它。



我们邀请您将Linux Perf GUI(热点)作为指南,在您的应用程序及其工作特性的激动人心的旅程中,陷入装配团队的精英氛围中,参观各种体系结构等等。



All Articles