zoukankan      html  css  js  c++  java
  • 工作笔记

    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

  • 相关阅读:
    ASP.NET MVC 3:缓存功能的设计问题
    Java开发和运行环境的搭建
    有关TSQL的10个好习惯
    j2me开发J2ME常用的手机厂商SDK和下载地址
    j2me开发Eclipse开发J2ME程序之Hello World
    winform需要缓存吗?webform的缓存的作用?
    学习J2ME编程需要掌握的七种技术
    下一代工作流大曝光:将支持C#表达式
    j2me 出色的开源项目
    eclipse和Myeclipse什么关系
  • 原文地址:https://www.cnblogs.com/twodog/p/12136633.html
Copyright © 2011-2022 走看看