鲲鹏devkit训练营——《锁长期等待》项目解析

《锁长期等待》项目解析

通过本次实验学习掌握性能分析工具,利用性能分析工具找出程序中加锁范围不合理的地方并解决

安装web端性能分析工具

获取性能分析工具软件包
1、登录远程服务器
获取鲲鹏性能分析工具软件包上传到远端服务器
鲲鹏devkit训练营——《锁长期等待》项目解析_第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性能分析

鲲鹏devkit训练营——《锁长期等待》项目解析_第2张图片
安装成功后使用web端进行登录,不要忘记打开8086端口号
鲲鹏devkit训练营——《锁长期等待》项目解析_第3张图片
进入性能分析页面

获取源码

首先在本地插件文件记事本,然后访问网址获取源码
https://github.com/kunpengcompute/devkitdemo/tree/main/Hyper_tuner/testdemo/lock

鲲鹏devkit训练营——《锁长期等待》项目解析_第4张图片
将代码粘贴到记事本当中,将记事本重命名为pthread_mutex_long.c,然后上传到远端服务器

在这里插入图片描述

进行源码编译启动

对文件授予最高权限
chmod -R 777 pthread_mutex_long.c
鲲鹏devkit训练营——《锁长期等待》项目解析_第5张图片

使用以下命令对源码进行编译
gcc -g pthread_mutex_long.c -o pthread_mutex_long -lpthread -lm && chmod 777 pthread_mutex_long
绑核启动程序
taskset -c 0-1 ./pthread_mutex_long
鲲鹏devkit训练营——《锁长期等待》项目解析_第6张图片

进行性能分析

新建系统性能分析工程
鲲鹏devkit训练营——《锁长期等待》项目解析_第7张图片

全景分析

首先进行全景分析
通过采集系统软硬件配置信息,以及系统CPU内存存储IO网络IO资源的运行情况,获得对应的使用率饱和度错误次数等指标,以此识别系统性能瓶颈。针对部分系统指标项,根据当前已有的基准值和优化经验提供优化建议。

针对大数据场景、数据库场景和分布式存储场景的硬件配置系统配置组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及软件版本信息。
采样时长60s即可,选择立即执行
鲲鹏devkit训练营——《锁长期等待》项目解析_第8张图片
开始进行数据采集
鲲鹏devkit训练营——《锁长期等待》项目解析_第9张图片
这里注意测试应用要一直在运行状态
采集完成后查看cpu利用率
鲲鹏devkit训练营——《锁长期等待》项目解析_第10张图片
cpu1和cpu0的使用率比较高

进程/线程分析性能分析

新建工程xcfex选择进程线程性能分析

采集进程/线程对CPU、内存、存储IO等资源的消耗情况,获得对应的使用率、饱和度、错误次数等指标,以此识别进程/线程性能瓶颈。针对部分指标项,根据当前已有的基准值和优化经验提供优化建议。针对单个进程,还支持分析它的系统调用情况。

采样时长60s

鲲鹏devkit训练营——《锁长期等待》项目解析_第11张图片
鲲鹏devkit训练营——《锁长期等待》项目解析_第12张图片
分析完成后在优化建议处可以看到给我们提示刚刚启动的应用需要优化
鲲鹏devkit训练营——《锁长期等待》项目解析_第13张图片
找到这两处线程
鲲鹏devkit训练营——《锁长期等待》项目解析_第14张图片

资源调度分析

新建工程进行资源调度分析

基于CPU调度事件分析系统资源调度情况,主要包括:

  • 分析CPU核在各个时间点的运行状态,如:Idle、Running,以及各种状态的时长比例。
  • 分析进程/线程在各个时间点的运行状态,如:Wait、Schedule和Running,以及各种状态的时长比例。
  • 分析进程/线程切换情况,包括:切换次数、平均调度延迟时间、最小调度延迟时间和最大延迟时间点。
  • 分析各个进程/线程在不同NUMA节点之间的切换次数。如果切换次数大于基准值,能给出绑核优化建议。

鲲鹏devkit训练营——《锁长期等待》项目解析_第15张图片
开始进行资源调度任务

鲲鹏devkit训练营——《锁长期等待》项目解析_第16张图片
找到启动的应用,这里可以看出线程的切换次数并不平均,意味这可以根据这方面进行性能调优
鲲鹏devkit训练营——《锁长期等待》项目解析_第17张图片
发现在采样期间两个线程之间的调度没有交集,没有平衡的相互交替运行,我们可以推断两个线程可能在抢占某个资源
鲲鹏devkit训练营——《锁长期等待》项目解析_第18张图片

热点函数分析

新建工程进行热点函数分析
分析C/C++程序代码,找出性能瓶颈点,获得对应的热点函数及其源码汇编指令;支持通过火焰图展示函数的调用关系,给出优化路径。

鲲鹏devkit训练营——《锁长期等待》项目解析_第19张图片
在总览处可以给出了,排名前十的热点函数
鲲鹏devkit训练营——《锁长期等待》项目解析_第20张图片
点击热点函数可以直接查看函数原码
鲲鹏devkit训练营——《锁长期等待》项目解析_第21张图片

鲲鹏devkit训练营——《锁长期等待》项目解析_第22张图片
这里对函数进行修改
鲲鹏devkit训练营——《锁长期等待》项目解析_第23张图片
这里是加锁的范围不合理,所以将开平方的操作移到锁外,可以减少频繁进行资源切换
鲲鹏devkit训练营——《锁长期等待》项目解析_第24张图片
这里修改后重新进行上传编译启动

资源分析任务结果

重新进行资源调度分析

分析进程/线程在各个时间点的运行状态,如:Wait、Schedule和Running,以及各种状态的时长比例。

修改前
鲲鹏devkit训练营——《锁长期等待》项目解析_第25张图片
修改后

鲲鹏devkit训练营——《锁长期等待》项目解析_第26张图片
可以看出两个线程调度均匀等待现象很少
通过修改使资源调度均匀提高了性能

你可能感兴趣的:(鲲鹏架构入门与实战,linux,服务器,运维)