浅谈性能优化方法和技巧 作者:KernelChina编辑:陈怀临.pdf

浅谈性能优化方法和技巧 作者:KernelChina编辑:陈怀临.pdf

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈性能优化方法和技巧 作者:KernelChina编辑:陈怀临.pdf

浅谈性能优化方法和技巧 作者 :KernelChina kernelchina@ 编辑 :陈怀临 huailin@ 1. 前言 : 这是一个可以用一本书来讲的话题 ,用一系列博客来讲 ,可能会比较单薄一点 ,这里只捡 重要的说 ,忽略很多细节 ,当然以后还可以补充和扩展这个话题。 我以前就说过 ,性能优化有三个层次 : ● 系统层次 ● 算法层次 ● 代码层次 系统层次关注系统的控制流程和数据流程 ,优化主要考虑如何减少消息传递的个数 ;如何 使系统的负载更加均衡 ;如何充分利用硬件的性能和设施 ;如何减少系统额外开销 (比如 上下文切换等)。 算法层次关注算法的选择 (用更高效的算法替换现有算法 ,而不改变其接口);现有算法 的优化 (时间和空间的优化 );并发和锁的优化 (增加任务的并行性 ,减小锁的开销 ) ;数据结构的设计(比如lock-free的数据结构和算法)。 代码层次关注代码优化 ,主要是cache相关的优化 (I-cache, D-cache相关的优化 );代 码执行顺序的调整 ;编译优化选项 ;语言相关的优化技巧等等。 性能优化需要相关的工具支持 ,这些工具包括编译器的支持 ;CPU的支持 ;以及集成到 代码里面的测量工具等等。这些工具主要目的是测量代码的执行时间以及相关的cache miss, cache hit等数据 ,这些工具可以帮助开发者定位和分析问题。 性能优化和性能设计不同。性能设计贯穿于设计 ,编码 ,测试的整个环节 ,是产品生命周 期的第一个阶段 ;而性能优化 ,通常是在现有系统和代码基础上所做 的改进 ,属于产品 生命周期的后续几个阶段 (假设产品有多个生命周期)。性能优化不是重新设计 ,性能优 化是以现有的产品和代码为基础的 ,而不是推倒重来。性 能优化的方法和技巧可以指导 性能设计 ,但两者的方法和技巧不能等同。两者关注的对象不同。性能设计是从正向考虑 问题 :如何设计出高效 ,高性能的系统 ;而性 能优化是从反向考虑问题 :在出现性能问 题时 ,如何定位和优化性能。性能设计考验的是开发者正向建设的能力 ,而性能优化考验 的是开发者反向修复的能力。两者 可以互补。 后续我会就工具 ,架构 ,算法 ,代码 ,cache等方面展开讨论这个话题 ,敬请期待。 2. 代码优化 : 代码层次的优化是最直接 ,也是最简单的 ,但前提是要对代码很熟悉 ,对系统很熟悉。很 多事情做到后来 ,都是一句话 :无他 ,但手熟尔^-^。 在展开这个话题之前 ,有必要先简单介绍一下Cache相关的内容 ,如果对这部分内容不熟 悉 ,建议先补补课 ,做性能优化对Cache不了解 ,基本上就是盲人骑瞎马。 Cache一般来说 ,需要关心以下几个方面 1 )Cache hierarchy Cache的层次 ,一般有L1, L2, L3 (L是level的意思)的cache。通常来说L1 ,L2是集成 在CPU里面的(可以称之为On-chip cache ),而L3是放在CPU外面(可以称之为Off- chip cache )。当然这个不是绝对的 ,不同CPU的做法可能会不太一样。这里面应该还 需要加上 register ,虽然register不是cache ,但是把数据放到register里面是能够提高性 能的。 2 )Cache size Cache的容量决定了有多少代码和数据可以放到Cache里面 ,有了Cache才有了竞争 , 才有 了替换 ,才有了优化的空间。如果一个程序的热点(hotspot)已经完全填充了整个 Cache ,那 么再从Cache角度考虑优化就是白费力气了,巧妇难为无米之炊。我们优化 程序的目标是把 程序尽可能放到Cache里面 ,但是把程序写到能够占满整个Cache还是 有一定难度的 ,这么大 的一个Code path ,相应的代码得有多少 ,代码逻辑肯定是相当 的复杂 (基本上是不可能 ,至少 我没有见过 )。 3 )Cache line size CPU从内存load数据是一次一个cache li

文档评论(0)

wangshirufeng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档