应用程序优化
编译器优化
算法优化
使用复杂度更低的算法,可以显著加快处理速度。
异步处理
使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。比如,把轮询替换为事件通知,就可以避免轮询耗费 CPU 的问题。
多线程替代多进程
线程的上下文切换成本小于进程的上下文切换成本。
善用缓存
经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,,这样在下次用时就能直接从内存中获取,加快程序的处理速度。
系统优化
一方面要充分利用CPU缓存的本地性,加速缓存访问;另一方面,要控制进程的CPU使用情况,减少进程间的相互影响。
CPU绑定
把进程绑定到一个或者多个 CPU 上,可以提高 CPU 缓存的命中率,减少跨 CPU 调度带来的上下文切换问题。
CPU独占
跟 CPU 绑定类似,进一步将 CPU 分组,并通过 CPU 亲和性机制为其分配进程。这样,这些 CPU 就由指定的进程独占,换句话说,不允许其他进程再来使用这些 CPU。
优先级调整
使用 nice 调整进程的优先级,正值调低优先级,负值调高优先级。
为进程设置资源限制
使用 Linux cgroups 来设置进程的 CPU 使用上限,可以防止由于某个应用自身的问题,而耗尽系统资源。
NUMA优化
中断负载均衡
无论是软中断还是硬中断,它们的中断处理程序都可能会耗费大量的 CPU。开启 irqbalance 服务或者配置 smp_affinity,就可以把中断处理过程自动负载均衡到多个 CPU 上。
网友评论