通过本次实验学习掌握性能分析工具,利用性能分析工具找出程序中加锁范围不合理的地方并解决
获取性能分析工具软件包
1、登录远程服务器
获取鲲鹏性能分析工具软件包上传到远端服务器
2、安装性能分析工具
使用一下命令对压缩包进行解压
tar --no-same-owner -zxvf Hyper-tuner_x.x.x_linux.tar.gz
通过–no-same-owner保证解压后的文件属组为当前操作用户(root)文件属组。
执行如下命令进入解压后的安装包目录
cd cd Hyper_tuner
执行如下命令安装工具
./install.sh
这里对应的信息为
选择安装工具,默认为安装系统性能分析、Java性能分析和系统诊断。可选择:
1:安装系统性能分析、Java性能分析和系统诊断
2:只安装系统性能分析和系统诊断
3:只安装Java性能分析
安装成功后使用web端进行登录,不要忘记打开8086端口号
进入性能分析页面
首先在本地插件文件记事本,然后访问网址获取源码
https://github.com/kunpengcompute/devkitdemo/tree/main/Hyper_tuner/testdemo/lock
将代码粘贴到记事本当中,将记事本重命名为pthread_mutex_long.c,然后上传到远端服务器
对文件授予最高权限
chmod -R 777 pthread_mutex_long.c
使用以下命令对源码进行编译
gcc -g pthread_mutex_long.c -o pthread_mutex_long -lpthread -lm && chmod 777 pthread_mutex_long
绑核启动程序
taskset -c 0-1 ./pthread_mutex_long
新建系统性能分析工程
首先进行全景分析
通过采集系统软硬件配置信息,以及系统CPU、内存、存储IO、网络IO资源的运行情况,获得对应的使用率、饱和度、错误次数等指标,以此识别系统性能瓶颈。针对部分系统指标项,根据当前已有的基准值和优化经验提供优化建议。
针对大数据场景、数据库场景和分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及软件版本信息。
采样时长60s即可,选择立即执行
开始进行数据采集
这里注意测试应用要一直在运行状态
采集完成后查看cpu利用率
cpu1和cpu0的使用率比较高
新建工程xcfex选择进程线程性能分析
采集进程/线程对CPU、内存、存储IO等资源的消耗情况,获得对应的使用率、饱和度、错误次数等指标,以此识别进程/线程性能瓶颈。针对部分指标项,根据当前已有的基准值和优化经验提供优化建议。针对单个进程,还支持分析它的系统调用情况。
采样时长60s
分析完成后在优化建议处可以看到给我们提示刚刚启动的应用需要优化
找到这两处线程
新建工程进行资源调度分析
基于CPU调度事件分析系统资源调度情况,主要包括:
开始进行资源调度任务
找到启动的应用,这里可以看出线程的切换次数并不平均,意味这可以根据这方面进行性能调优
发现在采样期间两个线程之间的调度没有交集,没有平衡的相互交替运行,我们可以推断两个线程可能在抢占某个资源
新建工程进行热点函数分析
分析C/C++程序代码,找出性能瓶颈点,获得对应的热点函数及其源码和汇编指令;支持通过火焰图展示函数的调用关系,给出优化路径。
在总览处可以给出了,排名前十的热点函数
点击热点函数可以直接查看函数原码
这里对函数进行修改
这里是加锁的范围不合理,所以将开平方的操作移到锁外,可以减少频繁进行资源切换
这里修改后重新进行上传编译启动
重新进行资源调度分析
分析进程/线程在各个时间点的运行状态,如:Wait、Schedule和Running,以及各种状态的时长比例。
修改前
修改后
可以看出两个线程调度均匀等待现象很少
通过修改使资源调度均匀提高了性能