鲲鹏社区首页
EN
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

性能分析过程

前提条件

  • 服务器和操作系统正常运行。
  • PC端已经安装SSH远程登录工具。
  • 目标环境上鲲鹏DevKit系统性能分析工具已经安装完成,并正常运行。
  • 目标环境上已安装GCC 7.3.0。

操作步骤

函数实现的功能为多个线程对一个变量进行累加操作。实践使用demo请参考testdemo

使用demo需注意以下几点:

  1. demo要求GCC版本在7.3及以上,低版本的GCC编译pthread_atomic.c会报错。
  2. 若使用的GCC版本为10.x.x及以上,因该版本默认启用LSE指令集,可能优化效果不明显,建议编译程序时添加参数“-march=armv8-a+nolse -mno-outline-atomics”用以禁用该指令集。
  3. 若需要关联源码,建议编译时加上-g参数;同时对编译后的二进制文件检查(可使用file pthread_mutex)是否存在BuildID,若不存在建议加上-Wl,--build-id参数。如:gcc -g -Wl,--build-id pthread_mutex.c -o pthread_mutex -lpthread 。
  4. 使用热点函数分析任务查看锁热点时,任务开启的同时后台需运行对应的demo,否则无法采集到锁的热点。
  5. 更多demo详情请查看demo说明(readme)。
  1. 新建热点函数分析任务。

    单击系统性能分析后面的,选择“通用分析”,打开新建任务页面,选择“热点函数分析”,参数配置完成后单击“确认”启动热点函数分析任务。未特别说明的参数请使用默认值。

    图1 新建热点函数分析任务
    表1 任务配置参数说明

    参数

    说明

    分析类型

    热点函数分析。

    分析对象

    应用。

    应用路径

    /opt/testdemo/pthread_mutex。

    采样时长

    30秒。

    采样间隔

    1秒。

    采样频率

    100次/秒。

    采样范围

    用户态。

    dwarf

    开启。

    C/C++ 源文件目录

    用于采集过程时关联源码。本示例使用/opt/testdemo/。

  2. 查看分析结果。
    图2 总览

    可以看到实际的两个线程对应的功能函数时钟周期占比很小,主要热点在Glibc对应的互斥锁上面。

  3. 新建锁与等待分析任务。

    单击系统性能分析后面的,选择“通用分析”,打开新建任务页面,选择“锁与等待分析”,参数配置完成后单击“确认”启动锁与等待分析任务。未特别说明的参数请使用默认值。

    图3 新建锁与等待分析任务
    表2 任务配置参数说明

    参数

    说明

    分析类型

    锁与等待分析。

    分析对象

    应用。

    模式

    Attach to process。

    PID

    选择pthread_mutex应用对应的进程号。

    锁分析类型

    全选(勾选“直方图统计”和“锁实例分析”)。

    预定义锁类型

    默认。

    采样时长

    60秒。

    采集原数据最大大小

    1024MiB。

    分析栈

    关闭。

  4. 查看分析结果。
    图4 锁与等待分析结果

    可以看到对应锁的调用情况,以及对应功能函数里的源码,对于变量num进行累加操作前后需要使用互斥锁,保证多个线程的操作均被执行到。但是应用的实际效率是很低的,过多的开销花费在了互斥锁的require和release上面。