性能优化的方法和技巧.docx
《性能优化的方法和技巧.docx》由会员分享,可在线阅读,更多相关《性能优化的方法和技巧.docx(21页珍藏版)》请在第一文库网上搜索。
1、性能优化方法和技巧:概述性能优化有三个层次:系统层次算法层次代码层次系统层次关注系统的掌握流程和数据流程,优化主要考虑如何削减消息传递的个数;如何使系统的负载更加均衡;如何充分采用硬件的性能和设施;如何削减系统额外开销(比如上下文切换等)。算法层次关注算法的选择(用更高效的算法替换现有算法,而不转变其接口);现有算法的优化(时间和空间的优化);并发和锁的优化(增加任务的并行性,减小锁的开销);数据结构的设计(比如lock-free的数据结构和算法)。代码层次关注代码优化,主要是cache相关的优化(I-cache, D-cache相关的优化);代码执行挨次的调整;编译优化选项;语言相关的优化技
2、巧等等。性能优化需要相关的工具支持,这些工具包括编译器的支持;CPU的支持;以及集成到代码里面的测量工具等等。这些工具主要目的是测量代码的执行时间以及相关的cache miss, cache hit等数据,这些工具可以关心开发者定位和分析问题。性能优化和性能设计不同。性能设计贯穿于设计,编码,测试的整个环节,是产品生命周期的第一个阶段;而性能优化,通常是在现有系统和代码基础上所做的改进,属于产品生命周期的后续几个阶段(假设产品有多个生命周期)。性能优化不是重新设计,性能优化是以现有的产品和代码为基础的,而不是推倒重来。性能优化的方法和技巧可以指导性能设计,但两者的方法和技巧不能等同。两者关注的
3、对象不同。性能设计是从正向考虑问题:如何设计出高效,高性能的系统;而性能优化是从反向考虑问题:在消失性能问题时,如何定位和优化性能。性能设计考验的是开发者正向建设的力量,而性能优化考验的是开发者反向修复的力量。两者可以互补。后续我会就工具,架构,算法,代码,cache等方面绽开争论这个话题,敬请期盼。评论:优化不能缺少量化的信息,基于量化信息可以解决这些问题(举个例子):什么时候使用静态内存,什么时候使用动态内存?动态与静态的分界线是什么?所谓和谐得恰到好处。最近由于工作需要也在做多核下的应用,这里面性能优化可能是最困难的地方了。个人觉得这方面作为学问共享的话,可以更加注意方法论的描述。优化本
4、身是个仁者见仁智者见智的事情,优化的效果评估一方面取决于你的应用场景,另一方面也取决于你的测试方法。我们就曾为了优化算法而设计了一个数学上看起来很棒的hash,结果在早期应用中我们发觉hash本身带来的cache miss,使得我们还不如使用linear search。总之是特别期盼后续的文章,盼望看到一些新的思路。关于代码层次的优化,大多时候是把高级语言向低级语言去靠。然后就是将系统层次扁平化,厚的层做薄,薄的层去掉。很多时候philosophy的冲突导致实现困难。性能好了,移植性,维护性差了。老板还不兴奋。我现在是越来越不想做这个7舌 了。在做设计阶段,就应当考虑性能的质量属性。假如软件已
5、经成型,再做系统级的性能优化,工作量、风险以及影响都较大。代码级优化:先找热点,然后针对这些热点进行分析,cache使用、削减不必要指令数、削减栈的深度、提高IO总线采用(如IO由每次变成批量访问)、TLBMiss等等。性能是不能一次搞定的,需要建立基线,不停地迭代,不停地确认。性能优化很简洁降低软件的其他质量属性:如维护性、可扩展性。性能优化方法和技巧:代码代码层次的优化是最直接,也是最简洁的,但前提是要对代码很熟识,对系统很熟识。很多事情做到后来,都是一句话:无他,但手熟尔八在绽开这个话题之前,有必要先简洁介绍一下Cache相关的内容,假如对这部分内容不熟识,建议先补补课,做性能优化对Ca
6、che不了解,基本上就是盲人骑瞎马。Cache一般来说,需要关怀以下几个方面1) Cache hierarchyCache的层次,一般有L1,L2, L3 (L是level的意思)的cache。通常来说LI, L2是集成 在CPU里面的(可以称之为On-chip cache),而L3是放在CPU外面(可以称之为Off-chip cache) o当然这个不是确定的,不同CPU的做法可能会不太一样。这里面应当还需要加上register,虽然register不是cache,但是把数据放到register里面是能够提高性能的。2) Cache sizeCache的容量打算了有多少代码和数据可以放到Ca
7、che里面,有了 Cache才有了竞争,才有了替换,才有了优化的空间。假如一个程序的热点(hotspot)已经完全填充了整个Cache,那么再从Cache角度考虑优化就是白费劲气了,巧妇难为无米之炊。我们优化程序的目标是把 程序尽可能放到Cache里面,但是把程序写到能够占满整个Cache还是有肯定难度的,这么大的一个Code path,相应的代码得有多少,代码规律确定是相当的简单(基本上是不行能,至少 我没有见过)。3) Cache line sizeCPU从内存load数据是一次一个cache line;往内存里面写也是一次一个cache line,所以一个cache line里面的数据最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 性能 优化 方法 技巧
