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

《锁长期等待》项目解析

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

安装web端性能分析工具

获取性能分析工具软件包
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调度事件分析系统资源调度情况,主要包括:

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

在这里插入图片描述
开始进行资源调度任务

在这里插入图片描述
找到启动的应用,这里可以看出线程的切换次数并不平均,意味这可以根据这方面进行性能调优
在这里插入图片描述
发现在采样期间两个线程之间的调度没有交集,没有平衡的相互交替运行,我们可以推断两个线程可能在抢占某个资源
在这里插入图片描述

热点函数分析

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

在这里插入图片描述
在总览处可以给出了,排名前十的热点函数
在这里插入图片描述
点击热点函数可以直接查看函数原码
在这里插入图片描述

在这里插入图片描述
这里对函数进行修改
在这里插入图片描述
这里是加锁的范围不合理,所以将开平方的操作移到锁外,可以减少频繁进行资源切换
在这里插入图片描述
这里修改后重新进行上传编译启动

资源分析任务结果

重新进行资源调度分析

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

修改前
在这里插入图片描述
修改后

在这里插入图片描述
可以看出两个线程调度均匀等待现象很少
通过修改使资源调度均匀提高了性能

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

样子的木偶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值