12 | 套路篇:CPU 性能优化的几个思路
倪朋飞
该思维导图由 AI 生成,仅供参考
你好,我是倪朋飞。
上一节我们一起回顾了常见的 CPU 性能指标,梳理了核心的 CPU 性能观测工具,最后还总结了快速分析 CPU 性能问题的思路。虽然 CPU 的性能指标很多,相应的性能分析工具也很多,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。
顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析套路,其实并不难。
在找到 CPU 的性能瓶颈后,下一步要做的就是优化了,也就是找出充分利用 CPU 的方法,以便完成更多的工作。
今天,我就来说说,优化 CPU 性能问题的思路和注意事项。
性能优化方法论
在我们历经千辛万苦,通过各种性能分析方法,终于找到引发性能问题的瓶颈后,是不是立刻就要开始优化了呢?别急,动手之前,你可以先看看下面这三个问题。
首先,既然要做性能优化,那要怎么判断它是不是有效呢?特别是优化后,到底能提升多少性能呢?
第二,性能问题通常不是独立的,如果有多个性能问题同时发生,你应该先优化哪一个呢?
第三,提升性能的方法并不是唯一的,当有多种方法可以选择时,你会选用哪一种呢?是不是总选那个最大程度提升性能的方法就行了呢?
如果你可以轻松回答这三个问题,那么二话不说就可以开始优化。
比如,在前面的不可中断进程案例中,通过性能分析,我们发现是因为一个进程的直接 I/O ,导致了 iowait 高达 90%。那是不是用“直接 I/O 换成缓存 I/O”的方法,就可以立即优化了呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了CPU性能优化的重要性以及方法论。作者首先提出了性能评估的“三步走”方法,强调了全面评估性能优化效果的重要性。在多个性能问题同时存在时,建议先分析所有性能问题,找出最重要、可以最大程度提升性能的问题进行优化。此外,文章从应用程序和系统资源两个维度分别探讨了降低CPU使用率和提高CPU并行处理能力的方法。在系统优化方面,提出了CPU绑定、CPU独占、优先级调整等方法。然而,作者也警示读者避免过早优化,强调性能优化应该是逐步完善、动态进行的过程。最后,鼓励读者在留言区分享更多的性能优化方法,并表示将在后续文章中介绍更多性能问题。整体而言,本文为读者提供了全面的CPU性能优化思路和方法,引发了对性能优化的深入思考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》,新⼈⾸单¥68
《Linux 性能优化实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(63)
- 最新
- 精选
- 每天晒白牙【D12打卡】 CPU性能优化思路 方法论 1.性能优化的效果判断 三步走理论 (1)确定性能的量化指标-一般从应用程序纬度和系统资源纬度分析 (2)测试优化前的性能指标 (3)测试性能优化后的性能指标 2.当性能问题有多个时,优先级问题 先优化最重要的且最大程度提升性能的问题开始优化 3.优化方法有多个时,该如何选 综合多方面因素 CPU优化 应用程序优化:排除不必要工作,只留核心逻辑 1.减少循环次数 减少递归 减少动态没错分配 2.编译器优化 3.算法优化 4.异步处理 5.多线程代替多进程 6.缓存 系统优化:利用CPU缓存本地性,加速缓存访问;控制进程的cpu使用情况,减少程序的处理速度 1.CPU绑定 2.CPU独占 3.优先级调整 4.为进程设置资源限制 5.NUMA优化 6.中断负载均衡 很重要的一点:切记过早优化
作者回复: 👍
2018-12-17346 - X又一篇精华满满的惊喜! 看到有人说,这些东西应该自己总结。是的,没错,很赞同。我也把用到的所有工具、指标、思路总结了一遍,但是看到老师给出了更全面系统的总结,仍然很受用。因为老师能从原理、关联多个角度给出更全面的知识网,也会指出一些易错的地方,是我们通学一遍、自己总结一遍以后的升华。起码,有些地方,因为原理知道的不多,我想错了或者漏了,看到这篇后,豁然开朗 老师给总结了,不等于你就会了,该学还得学,该记还得记,就像是满满的金子堆你面前,要不要弯腰去捡😊
作者回复: 😊
2018-12-1716 - 我来也[D12打卡] 这些常见的性能优化方法,之前都了解的不全面,待其他大神给我们开开眼界. 我以前优化大多都是感性的,就是凭感觉或经验,并没有些实际的指标来观测. 一方面自己只是做开发,管好自己的程序即可,其他方便(比如系统环境)可能是有心无力. ------------------------- "过早优化是万恶之源" 我也是很赞同的,用户没几个,花那么多精力做过度优化没必要,还不如拿那些时间来学学专栏.等真的有一定规模和趋势了,再用"二八原则"有针对性的优化. 我个人一般在写代码时,会在可以进一步优化的地方加个注释,暂时先在够用的情况下,怎么简单怎么来,后期如果有必要了,再来找这些注释,看什么地方值得优化. ------------------------- 应用程序优化方面,可以谈谈我的经历: 编译器优化: 刚参加工作时,培训期间练习一些算法,会对比每个人程序的性能. 我当时还是用的VC6.0++. 而有的同学用dev-c++编译器, 结果成绩经常被吊打. 即使是同一份源码,编译出来的程序也是有很大的差距. 算法优化: 正在学算法专栏. 也是要根据实际情况来优化, 利用二八原则,有针对性的优化,不要什么都优化,一天才执行一次的程序, 耗时1s 和0.001s的差距并不大. 虽然数字上相差了很多倍. 异步优化: 比如lua的协程,epoll代替原来的select和poll. 多线程代替多进程: 线程的切换理论上是比进程切换的成本低. 但有时候考虑到扩展性,还会从单进程改为多进程模型. 善用缓存:也可利用二八原则, 看值不值得. 是用空间换时间,还是时间换空间. ------------------ 做优化,真的是要见机行事,像老师说的,[不要只会“拿来主义”]
作者回复: 总结的真棒,也谢谢分享你的经历
2018-12-17411 - xcz买了几个课程里觉得最好的一门课,有条理,干货满满!
作者回复: 谢谢
2018-12-195 - 南宫轩诺倪老师,请教您一个问题:最近在开发服务端,遇到一个问题,客户端开启单线程批量向不断服务端导入数据(服务端是多线程接收),并且存在加锁、日志异步打印和耗时统计操作,在这种情况下,客户端导入数据比较慢,服务端的cpu利用率只能维持在50%~60%左右,通过iostat和pidstat工具观测系统io和进程上下文切换等指标也没发现导致该现象的原因。 如果关闭日志打印和耗时统计操作,cpu利用率会得到很大的提升,接近100%,客户端数据导入速度得到很大提升。因此我判断是日志打印和统计导致cpu利用率过低。针对这种情况,从哪些指标上能辅助发现是日志打印和耗时操作导致cpu不能高效利用呢?期待您的答疑,谢谢!
作者回复: I/O 模块有讲解的
2019-01-1524 - Im Robin打开,谢谢老师干货满满的教学 -------------------------------------------------------------- 这里有一个问题, 我们线上的nginx两个实例之间QPS差2倍,nginx前面是四层SLB,两者唯一的区别就是centos6.5跟centos7.3,QPS高的机器load也高,推论就是centos6.5的那台压力上不去,在/proc/interrupts看到centos6.5的只有cpu0在处理虚拟网卡中断,而另一台四个cpu都在工作,不知道是不是这里的原因,看到这篇里老师有提到中断负载均衡,在想跟这里有没有关系,想向老师请教下
作者回复: 试试irqbalance或者配置 smp_affinity
2018-12-193 - 小宇子2B老师好,近期遇到一个问题,6核机器,负载在20-100之间徘徊,查看了cpu使用率、io、上下文切换都是很正常,业务是java的一个应用主要是接收监控agent上报的数据的,业务不受影响,其他一切正常,还有什么可能会导致负载高吗?
作者回复: 查看的时候有没有可能忽略了多线程的问题?
2019-06-272 - Maxwell请问CPU优化,cpu使用率和队列长度多少比较合适呢?
作者回复: 自然是越低越好,这样可以运行更多的应用。不过这其实没有统一标准,比如有些应用就需要总是 CPU 100%,而更多的应用则不是。
2019-01-252 - walt倪老师好,4核8G Centos7,cpu load 超过15,单核任务数接近4了,但是 cpu idle还有20~30%,这个情况下如何评价CPU资源呢?
作者回复: 繁忙呀,这时候系统就需要不停在调度进程,也会有大量的上下文切换
2018-12-2822 - JuCY谢谢,不好意思再追问几句。 负载高CPU使用率低【也就是%idle高】,老师的结论是IO高,但我下面这么分析不知道对不对? 负载高CPU使用率低,说明CPU空闲的时候,等待队列里都是D状态进程,但是根据%iowait的定义和D状态的定义,CPU空闲时有D进程在等待的这段时间,应该算在iowait里,而不算在idle里,所以应该是%iowait高,%idle低才是啊,怎么会是%idle高呢?
作者回复: 不是所有的I/O等待都算在iowait里:一旦有了使用CPU的进程,iowait就会降下来,user sys这些升高
2019-02-281
收起评论