性能优化方法论

在优化前要考虑的三个问题

  • 首先,判断性能优化是不是有效?优化后,能提升多少性能?
  • 第二,性能问题通常都不是独立的,如果有多个性能问题同时发生,先优化哪一个?
  • 第三,提升性能的方法并不是唯一的,当有多种方法可以选择时,你会选用哪一种?

评估性能优化的效果

三步走
1、确定性能的量化指标
2、测试优化前的性能指标
3、测试优化后的性能指标
性能的量化指标很多,比如cpu使用率、应用程序的吞吐量、客户端的请求延迟等都可以评估性能。
不能局限在单一维度上,至少要从应用程序和系统资源两个维度上来选择不同的指标

  • 应用程序的维度,我们可以用吞吐量和请求延迟来评估应用程序的性能
  • 系统资源的维度,我们可以用cpu使用率来评估系统的CPU使用情况

之所以选择这两个不通维度指标,是因为应用程序和系统资源这两者相辅相成的关系
好的应用程序是性能优化的最终目的和结果,系统优化总是为应用程序服务的。所以,必须要是用应用程序的指标,来评估性能优化的整体效果。
系统资源的使用情况是影响应用程序性能的根源。所以,需要用系统资源的指标,来观察和分析瓶颈的来源

多个性能问题同时存在,要怎么选择?

系统性能总是牵一发而动全身,所以性能问题通常也不是独立存在的。那么当多个性能问题同时发生的时候,应该去优化那一个?
在性能测试的领域,流传很广的一个说法是“二八原则”,也就是说80%的问题都是由20%的代码导致的。只要找出这20%的位置,你就可以优化80%的性能,也就是说并不是所有的性能的问题都值得优化。
先把所有的性能问题分析一遍,找出最重要的、可以最大程度提升性能的问题,从它开始优化。这样的好处是,不仅性能提升的收益最大,而且很可能其他问题都不用优化,就已经满足了性能要求。

有多种优化方法时,要如何选择?

一般情况下,选能最大提升性能的方法,这其实也是性能优化的目标。
但要注意,现实情况要考虑的因素却没有那么简单。最直观来说,性能优化并非没有成本。性能优化通常会带来复杂度的提升,降低程序的可维护性,还可能在优化一个指标时,引发其他指标的异常。也就是说,很可能你优化了一个指标,另一个指标的性能却变差了。在考虑选择那个性能优化方法时,综合多方面的因素。不能想着“一步登天”,试图一次性解决所有问题;也不要只会“拿来主义”,把其他应用的优化方法原封不动拿来用,却不经过任何思考和分析。

CPU优化

清楚了性能优化最基本的三个问题后,我们接下来从应用程序和系统的角度,分别来看看如何才能降低CPU使用率,提高CPU的并行处理能力。

应用程序优化

从应用程序的角度来说,降低CPU使用率的最好方法当然是,排出所有不必要的工作,只保留最核心对的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。
除此之外,应用程序的性能优化也包括很多种方法,常见的以下几种:

  • 编译器优化 eg:gcc提供的优化选项-02
  • 算法优化 eg:在数据比较大的情况下,可以用O(nlogn)的排序算法(如快排、归并排序等),代替0(n^2)的排序算法。
  • 多线程代替多进程 相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。
  • 善用缓存

系统优化

从系统的角度来说,优化CPU的运行,一方面要充分利用CPU缓存的本地性,加速缓存访问;另一方面,就是要控制进程的CPU使用情况,减少进程间的相互影响。
具体来说,系统层面的CPU优化方法也有不少,常见的一些方法

  • CPU绑定:把进程绑定到一个或者多个CPU上,可以提高CPU缓存的命中率
  • CPU独占:跟cpu绑定类似,进一步将CPU分组,并通过CPU亲和性机制为其分配进程。这样,这些CPU就有指定的进程独占,换句话说,不允许其他进程再来使用这些
  • 优先级调整:使用nice调整进程的优先级,正值调低优先级,负值调高优先级。
  • 为进程设置资源限制:使用Linux cgroups来设置进程的CPU使用上限,可以防止由于某个应用自身的问题,而耗尽系统资源。
  • NUMA优化
  • 中断负载均衡:无论是软中断还是硬中断,他们的中断处理程序都可能会耗费大量的CPU。开启irqbalance服务或者配置smp_affinity,就可以吧中断处理过程自动负载均衡到多个CPU上。

千万避免过早优化

过早优化是万恶之源,一方面,优化会带来复杂性的提升,降低可维护性;另一方面,需求不是一成不变的。针对当前情况进行的优化,很可能并不适应快速变化的新需求。这样,在新需求出现时,这些复杂的优化,反而可能阻碍新功能的开发。

CPU性能优化的几个思路相关推荐

  1. 12 | 套路篇:CPU 性能优化的几个思路

    上一节我们一起回顾了常见的 CPU 性能指标,梳理了核心的 CPU 性能观测工具,最后还总结了快速分 析 CPU 性能问题的思路.虽然 CPU 的性能指标很多,相应的性能分析工具也很多,但理解了各种指 ...

  2. CPU性能优化的几个思路?

    性能优化方法论 在我们历经千辛万苦,通过各种性能分析方法,终于找到引发性能问题的瓶颈后,是不是立刻就要开始优化了呢?别急,动手之前,你可以先看看下面这三个问题. 首先,既然要做性能优化,那要怎么判断它 ...

  3. 性能:CPU性能优化的几个思路

    性能优化方法论 找出CPU的性能瓶颈之后,下一步要做的就是优化了,在优化之前,我们应该先看看下面这三个问题: 既然要做性能优化,那要怎么判断它是不是有效的呢?特别是优化后,到底能提升多少性能呢? 性能 ...

  4. CPU套路篇:cpu性能优化的几个思路???

    性能优化方法论: 找到系统瓶颈后, 怎么判断优化是否有效,并且能提升多少性能?? 如果有多个性能问题,应该先优化哪一个?? 提升性能的方法并不是唯一的,当有多种方法可以选择时,你会选择哪一种?是不是总 ...

  5. cpu 性能优化思路

    cpu 性能优化思路 文章目录 cpu 性能优化思路 前言 一.性能优化方法论 cpu性能优化工具 性能优化是否有效 多个性能问题同时存在,要怎么选择? 有多种优化方法时,要如何选择? 二.CPU 优 ...

  6. 性能计数器驱动_Linux CPU性能优化方法

    在Linux系统中,由于成本的限制,往往会存在资源上的不足,例如 CPU.内存.网络.IO 性能.本文,就对 Linux 进程和 CPU 的原理进行分析,总结出 CPU 性能优化的方法. 1. 分析手 ...

  7. 网络性能优化的几个思路

    本文是通过学习倪朋飞老师的<Linux性能优化实战> :网络性能优化的几个思路? 网络性能优化的几个思路 确定优化目标 网络性能工具 网络性能优化 应用程序 套接字 网络性能优化 传输层 ...

  8. Linux性能优化-CPU性能优化思路

    目录 CPU性能指标 性能工具 如何迅速的分析CPU性能瓶颈 性能优化方法论 CPU优化 参考 CPU性能指标 CPU使用率 1.CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任 ...

  9. 31 | 套路篇:磁盘 I/O 性能优化的几个思路

    上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路. 虽然 I/O 的性能指标很多,相应的性能分析工具也有好 ...

最新文章

  1. 原创 | 浅议数据资产市场
  2. java消息幂等性实现_探讨一下实现幂等性的几种方式
  3. maven helper的使用
  4. 通过一道面试题来看 C++ 语言中的表达式求值
  5. python中以下关于列表描述错误的_10. 以下关于列表操作的描述,错误的是:_学小易找答案...
  6. 用c语言写出一个榜单程序,C语言依然位居榜单前列,依然值得程序员学习
  7. webx学习(一)——初识webx
  8. 如何设置一个严格30分钟过期的Session 1
  9. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。
  10. java程序设计之学生选课管理系统_课内资源 - 基于JAVA面向对象的学生选课管理系统...
  11. mysql directx repair_[MySQL]快速解决is marked as crashed and should be repaired故障
  12. c语言键盘符号大全,c语言实现数学符号软键盘源码
  13. 用html写简单的座位表,html座位表,随机点名
  14. springboot整合postgresql
  15. html怎么清除背景颜色,怎么去除Word复制网页内容的背景色?
  16. 院士如何应对互联网的碎片化和复杂性?道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  17. d3dx9_42.dll缺少
  18. 【观察】跨入5G新时代,维谛技术(Vertiv)的行与思
  19. 阿里云服务器,腾讯云服务器,华为云服务器被攻击了怎么办?
  20. 数据太多?3款免费数据分析软件,分分钟解决

热门文章

  1. 详细介绍Covariate Shift问题
  2. 静态数据成员(C++)
  3. PPT如何压缩文件大小?建议收藏这些方法
  4. 经典光流算法Lucas-Kanade(有图助理解)
  5. 「大数据的关键思考系列」21:阿里巴巴运营数据的外三板斧之“存、管、用”(下)...
  6. 【python】numel()
  7. django和数据库交互,在微信小程序端把数据库的信息修改为用户输入的信息
  8. BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】
  9. 【51nod P3047】位移运算【位运算】
  10. Windows如何解除bitlocker加密? • 貓噗知識+