• 鲲鹏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,以及各种状态的时长比例。

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

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

  • 相关阅读:
    Ue5 websocket控制Character前后左右动作
    RabbitMQ学习总结-延迟消息
    Flutter笔记:使用相机
    WEEX编译|加密市场三季度回顾及未来展望
    CSDN 勤学会 —— 和优秀的人一起学习进步
    市场调查与分析[市场调查员][抽样技术方案][抽样方法][F检验]
    基于Web的大学生实验课预约管理系统
    mysql使用连接池
    神经网络在科研中的应用,神经网络理论与应用
    【精讲】vue2框架 路由的使用及案例精讲
  • 原文地址:https://blog.csdn.net/m0_63694520/article/details/128013932