perf工具

perf工具

         1、查找耗时点、cache-misses、L1-dcache-load-misses

perf top -C x

perf record -g -e cpu-clock -F 99 -p xxx 

perf report    --- 函数、汇编

最近参与了acl性能优化的方面的工作,目前优化过程接近尾声,过程中走了不少弯路,当然也学习到了很多性能优化的方法,现在做下总结。

优化角度:架构、算法、代码。软件&硬件。

这里不讨论硬件优化,以及架构优化,因为这个都是系统级别的,不是可以轻易优化的。

了解业务 ------- 优化算法 或 设计新算法 ---------- 优化代码 

首先要对业务有非常通透的理解,因为大多数代码首次开发或者架构设计的时候受项目进度约束,并非最完美的,了解了业务,同时明确目前的代码实现,这样就可以找出当前的代码存在冗余的部分,可以除去不必要的处理,或者合并部分处理过程。甚至设计新的算法。算法确认最优后,其次才能对代码细节做优化。

算法优化:线性表-----链表------哈希-----树

栈、队列:这两个一般是功能型的结构,不涉及性能。

线性表:定义的数组、开辟的连续内存

链表:指针、向量

哈希:bihash

树:二叉树、

         平衡二叉树:搜索性能好

         红黑树:    插入删除动态调整的性能好

         以上适用于数据较小,完全可以放在内存中。

=================================================

         B树:多叉树

         B+tree:数据都在叶子结点,平衡查找速度

         B*tree:可指向兄弟节点,减少分裂。

         以上适用于数据库等数据量较大,需要放在磁盘上。

=================================================

         tire树:

         radix树:

=================================================

代码优化方法:

         内存角度:大页表(TLB、大页内存):访问内存,要查页表,加速查表。

         缓存角度:cache优化(i-cache、d-cache、对齐)、数据预取(连续内存、适度预取)

         耦合角度:高内聚低耦合(相关代码放在一起)、减少冗余代码

         开栈角度:减少调用层次 、inline、宏构造函数、

         指令角度:循环展开(指令预取相关)、分支预测(likely)

         其他:寄存器参数、延迟计算、提前计算

拓展:多核、多线程、共享数据、读写分离、异步、并发、上下文切换、内存池、

问:为了减少函数调用层次,减少开栈时间,而把一个函数写的较大,

上一篇:Node.js安装


下一篇:infinispan~介绍