中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

性能分析过程

前提条件

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

操作步骤

函数实现的功能为多个线程对一个变量进行累加操作。实践使用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 任务配置参数说明

    参数

    说明

    分析对象

    应用

    分析类型

    热点函数分析

    应用路径

    /opt/testdemo/pthread_mutex

    采样时长

    30秒

    采样间隔

    1秒

    采样频率

    100次/秒

    采样范围

    用户态

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

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

  3. 执行锁与等待分析任务。
    表2 任务配置参数说明

    参数

    说明

    分析类型

    锁与等待分析

    分析对象

    应用

    模式

    Attach to process

    PID

    选择pthread_mutex应用对应的进程号

    锁分析类型

    全选

    预定义锁类型

    默认

    采样时长

    20秒

    采集原数据最大大小

    1024MiB

    分析栈

    关闭

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

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