• 工作笔记


    1. 优化方向

    1.1 减少数据拷贝
    1.1.1 尽量减少数据拷贝次数,采用指针而非实际数据传参
    1.1.2 内核与用户态间数据拷贝注意使用cache,与不带cache的性能可相差10倍(具体参见内存山图)
    i.e. 鱼眼特性拷贝用户态5400kb的YUV只需6ms,从海思解码帧存(内核态分配地址)拷贝需30ms,采用带cache的帧存后与用户态拷贝耗时一致

    1.2 cache命中优化
    1.2.1 空间局部性: cache采用cache line传输,将相邻数据放在一起可提升cache命中;减少全局变量与静态变量的使用(一般与代码相距较远);使用section宏让相关代码在内存里紧密排列
    1.2.2 时间局部性: 同一段数据采用函数回调方式层层处理(类似linux网络协议栈处理)以提升cache命中率,相反如果两个线程一个线程处理完通知另一线程处理,等另一线程调度时cache可能已经发生变化

    1.3 锁优化
    1.3.1 减少锁的使用
    1.3.2 根据场景不同使用不同的锁(自旋锁,读写锁,顺序锁...)
    1.3.3 实现无锁代码(CAS...)

    1.4 减少调度
    1.4.1 设置CPU亲和性

    2. 性能调试工具

    2.1 perf
    2.1.1 编译perf
    perf为linux自带工具,在内核目录/tools/perf下直接make即可,可能会出现以下两个问题
    gcc threat warning as error: 交叉编译perf需执行参数,具体参见Makefile首部注释说明很清楚 i.e. make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- WERROR=0
    can't find liblk.a: 注意编译perf依赖liblk.a,如果是交叉编译的perf需先删除默认路径下liblk.a(基于x86的库)并交叉编译生成对应的库

    2.1.2 使用perf查看热点函数
    perf top -G > result.txt

    转载于:https://www.cnblogs.com/Five100Miles/p/9235752.html

  • 相关阅读:
    IM,游戏服务端 tcp 框架整理
    IronPython初体验和实战集合等类型转换和类型匹配
    C# 控件包
    ORM框架系列
    C# Excel或表格插件
    vue之修饰符
    vue之单表输入绑定
    vue之计算属性和侦听器
    vue之指令系统
    vue之用法
  • 原文地址:https://www.cnblogs.com/twodog/p/12136633.html
Copyright © 2020-2023  润新知