Tools
- Perf linux内核自带了一个性能分析工具
- Dperf CPU(Octeon)提供的各种硬件监测指标(通过读取各种寄存器)
监控因子:
- cache miss
- cache hit
- function run cycle
- instruction num
- Branch miss
原理:运行时设置,通过修改函数入口和出口处的跳转至监控代码处。
系统级的优化
- 减少tlb miss,通过btlb实现;
- 代码段热点流程函数指定在同一个段中,减少代码跨度大导致的指令cache miss;
- 根据cache的策略调整地址空间;很多cpu用虚拟地址索引,物理地址匹配cache 行,多核情况下,可将同构的多核代码虚拟地址错开;
- 编译选项-o3;
- 指令预取;
代码级优化
- 减少锁冲突; 能local的数据尽量local; 采用无锁优化算法;
- 指令上的优化;比如memset可用64位指令赋值来优化;
- 关键位置代码使用短小精悍的内嵌汇编代码实现;
- 用移位实现乘除法运算;
- inline函数; 宏定义;减少压栈出栈的时间开销;
- static增加内联;
- 固定查表优化;
- likely/unlikely 增加分支预测准确度;
- 数据结构cache line对齐;
- 业务算法优化;