(五)Linux性能优化-CPU-性能优化
性能优化文章参考倪朋飞老师的Linux性能优化实战课程
性能优化方法论
Q:怎么评估性能优化的效果?
A:对系统的性能指标进行量化,并且要分别测试出优化前、后的性能指标,用前后指标的变化来对比呈现效果
。确定性能的量化指标;测试优化前的性能指标;测试优化后的性能指标
Q:多个性能问题同时存在,要怎么选择?
A:不是所有的性能问题都值得优化,找出最重要的、可以最大程度提升性能的问题
Q:有多种优化方法时,要如何选择?
A:性能优化通常会带来复杂度的提升,降低程序的可维护性,还可能在优化一个指标时,引发其他指标的异常;切记,不要想着“一步登天”,试图一次性解决所有问题;也不要只会“拿来主义”,把其他应用的优化方法原封不动拿来用,却不经过任何思考和分析
CPU优化
- 应用程序优化
- 编译器优化
- 算法优化
- 异步处理
- 多线程
- 缓存
- 系统优化
- CPU绑定:把进程绑定到一个或者多个 CPU 上,可以提高 CPU 缓存的命中率,减少跨 CPU 调度带来的上下文切换问题
- CPU独占:跟 CPU 绑定类似,进一步将 CPU 分组,并通过 CPU 亲和性机制为其分配进程。这样,这些 CPU 就由指定的进程独占,换句话说,不允许其他进程再来使用这些 CPU
- 优先级调整:使用 nice 调整进程的优先级,正值调低优先级,负值调高优先级。优先级的数值含义前面我们提到过,忘了的话及时复习一下。在这里,适当降低非核心应用的优先级,增高核心应用的优先级,可以确保核心应用得到优先处理。
- 为进程设置资源限制:使用 Linux cgroups 来设置进程的 CPU 使用上限,可以防止由于某个应用自身的问题,而耗尽系统资源。
- NUMA(Non-Uniform Memory Access)优化:支持 NUMA 的处理器会被划分为多个 node,每个 node 都有自己的本地内存空间。NUMA 优化,其实就是让 CPU 尽可能只访问本地内存。
- 中断负载均衡:无论是软中断还是硬中断,它们的中断处理程序都可能会耗费大量的 CPU。开启 irqbalance 服务或者配置 smp_affinity,就可以把中断处理过程自动负载均衡到多个 CPU 上。
# 查看系统平均负载
watch -d uptime
# 查看系统CPU情况
mpstat -P ALL 1
# 查看进程CPU使用情况
pidstat -u 1
# 查看上下文切换
vmstat 1 10