鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

性能瓶颈优化

实际功能代码的执行速度很快,多线程使用锁的方案会把大量的开销花费在锁的竞争上,为了减少公共资源的抢占可以通过原子变量无锁的编程方式优化代码。

pthread_atomic为已优化的应用,再次执行分析任务查看优化效果。

  1. 再次新建热点函数分析任务(pthread_atomic应用)。

    单击系统性能分析后面的,选择“通用分析”,打开新建任务页面,选择“热点函数分析”,参数配置完成后单击“确认”启动热点函数分析任务。未特别说明的参数请使用默认值。

    使用系统热点函数监测锁热点时,在任务开启的同时,后台需运行对应的demo,否则无法采集到锁的热点。

    图1 新建热点函数分析
    表1 任务配置参数说明

    参数

    说明

    分析类型

    热点函数分析。

    分析对象

    应用。

    应用路径

    /opt/testdemo/pthread_atomic。

    采样时长

    30秒。

    采样间隔

    1秒。

    采样频率

    100次/秒。

    采样范围

    用户态。

    dwarf

    开启。

    C/C++ 源文件目录

    用于采集过程时关联源码。本示例使用/opt/testdemo/。

  2. 查看分析结果。
    图2 热点函数分析结果
  3. 再次新建锁与等待分析任务(pthread_atomic应用)。

    单击系统性能分析后面的,选择“通用分析”,打开新建任务页面,选择“锁与等待分析”,参数配置完成后单击“确认”启动锁与等待分析任务。未特别说明的参数请使用默认值。

    图3 新建锁与等待分析任务
    表2 任务配置参数说明

    参数

    说明

    分析类型

    锁与等待分析。

    分析对象

    应用。

    模式

    Attach to process。

    PID

    选择pthread_atomic应用对应的进程号。

    锁分析类型

    全选(勾选“直方图统计”和“锁实例分析”)。

    预定义锁类型

    默认。

    采样时长

    60秒。

    采集原数据最大大小

    1024MiB。

    分析栈

    关闭。

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

    分析结果显示锁实例的计数和总时长大幅降低。

总结

通过热点函数分析和锁与等待分析任务,找到多线程应用代码中公共资源抢占下使用锁机制带来的额外开销,通过原子变量实现无锁编程实现了同样的效果,减少了不必要的开销。