性能优化技巧之必备知识
创始人
2024-07-31 16:30:37
0

 性能优化这个话题可大可小。从大的方面来说,在系统设计之初,需要考虑硬件的选择,操作系统的选择,基础软件平台的选择;从小到方面来说,每个子系统的设计,算法选择,代码怎么写,如何使用编译器的选项,如何发挥硬件的***性能等等。本系列关注的是在给定硬件平台,给定操作系统和基础软件平台的情况下,如何优化代码,简而言之,就是关注小的方面。

在给定硬件平台的情况下,如何发挥硬件的***效能?前提是需要对硬件平台很熟悉。如何分离硬件相关代码和硬件无关的代码是一个很重要的技能。针对某一硬件平台优化固然是好,但是如果代码都是硬件相关的,就失去了可移植性,软件的性价比不一定高。

性能优化只是系统的一个方面,它会和系统的其他要求有冲突,比如

  • 可读性:性能优化不能影响可读性,看起来不怎么漂亮的代码,没有人愿意维护
  • 模块化:性能优化往往需要打破模块的边界,想想这是否值得
  • 可移植:隔离硬件相关的代码,尽量使用统一的API
  • 可维护:许多性能优化的技巧,会导致后来维护代码的人崩溃

需要在性能优化和上述的几个要求之间做出tradeoff,不能一意孤行。

性能优化的目标是什么?不外乎两个

  • 时间性能:减小系统执行的时间
  • 空间性能:减小系统占用的空间

那么我们优化的策略,首先就是对系统进行分解,测量:

  • 分解:系统包含的子系统,执行路径,函数,指令等等
  • 测量:每个子系统,执行路径,函数,指令所花费的时间和空间

然后,选取执行次数最多,消耗时间最长的函数进行优化(这里需要指出的是,消耗时间最长的函数并不一定就是优化的对象,这个需要放到某个执行路径上去考察,优化最常使用的执行路径)。

对于单核和多核的优化,有什么不同?以cache miss为例,在单核上

  • I-cache miss的原因是什么?一是代码路径太长,以至于超出了cache的容量,cache需要替换;二是 多个执行路径之间相互交替,cache需要替换;三是I-cache, D-cache互相踩。(对于i-cache的优化,基本上没有什么可遵循的规则。最有效的还是:一,减少无用的代码;二,减少冗余的代码;三,减少函数调用的开销;4,快速路径短小精干,相关代码相邻;5,相关代码放到一个段里面等等)
  • D-cache miss的原因是什么?一是数据结构太大,超出了cache的容量(大数组,长链表都会有这个问题,比较之下,还是数组更让人放心一点);二是多个数据结构之间相互踩(问题是一个执行路径,需要访问那么多数据吗?如果是,这个路径是不是太复杂了一点);三是D-cache和I-cache的冲突(这个不好说,系统里面会出现这种模式的cache miss吗?)

在多核上,cache miss会有什么新的特点?

  • I-cache miss:多核有独立的L1 cache,共享的L2/L3 cache。如果多条执行路径同时进行,cache的冲突几率就会增大。但是这是没办法的事情,总不能什么事都不做吧。所以,对i-cache的优化,关注快速路径就可以了,不要把精力都花费在这个上面
  • D-cache miss:锁,原子操作,伪共享等都会引起多核上的D-cache miss。这是多核优化时需要关注的重点。优化的策略也很直接,就是尽量减少锁,原子操作,伪共享等。多核的所有冲突都是由共享引起的,所以要区分出哪些是必须共享的,哪些是可以per thread的。并行优化与应用有关,需要注意的是,优化是否对所有用例都有效?做不好,可能顾此失彼。

性能优化必备技能

  • 熟悉系统执行路径:可以通过读代码或者使用profiling工具学习代码,要思考执行路径上不合理的地方,看看哪里可以减少,哪里可以合并。熟悉系统执行路径是性能优化的基础。
  • 熟悉测量工具:顺手的工具必不可少
  • 常用的代码优化技巧和策略:针对不同的语言,不同的平台,使用与之相应的技巧和策略

学习性能优化是一个不断积累的过程,在这个过程中,总结和学习自己用的顺手的工具和技巧,不断尝试,不断思考,就会有收获。

原文:性能优化的方法和技巧:总结

【编辑推荐】

  1. 性能优化技巧之工具选择
  2. 性能优化技巧之系统层次优化
  3. 新的技术产业:Web性能优化
  4. Linux网络性能优化方法简析
  5. 网站性能优化***实践

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...