欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux性能之CPU优化

程序员文章站 2022-04-16 11:41:26
CPU优化 我们接下来从应用程序和系统的角度,分别来看看如何才能降低 CPU 使用率,提高 CPU 的并行处理能力。 应用程序优化 首先,从应用程序的角度来说,降低 CPU 使用率的最好方法当然是,排除所有不必要的工作,只保留最核心的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。除此之外 ......

cpu优化

我们接下来从应用程序和系统的角度,分别来看看如何才能降低 cpu 使用率,提高 cpu 的并行处理能力。

应用程序优化

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

  • 编译器优化:很多编译器都会提供优化选项,适当开启它们,在编译阶段你就可以获得编译器的帮助,来提升性能。比如, gcc 就提供了优化选项 -o2,开启后会自动对应用程序的代码进行优化。
  • 算法优化:使用复杂度更低的算法,可以显著加快处理速度。比如,在数据比较大的情况下,可以用 o(nlogn) 的排序算法(如快排、归并排序等),代替 o(n^2) 的排序算法(如冒泡、插入排序等)。
  • 异步处理:使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。比如,把轮询替换为事件通知,就可以避免轮询耗费 cpu 的问题。
  • 多线程代替多进程:前面讲过,相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。
  • 善用缓存:经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,这样在下次用时就能直接从内存中获取,加快程序的处理速度。

系统优化

从系统的角度来说,优化 cpu 的运行,一方面要充分利用 cpu 缓存的本地性,加速缓存访问;另一方面,就是要控制进程的 cpu 使用情况,减少进程间的相互影响。具体来说,系统层面的 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 上。