Linux性能优化(十二)——CPU性能调优

1、应用程序优化

(1)编译器优化。适当开启编译器优化选项,在编译阶段提高性能。gcc提供优化选项-On会自动对应用程序的代码进行优化。
(2)算法优化。使用复杂度更低的算法,能够显著加快处理速度。在数据比较大的状况下,能够用O(nlogn)的排序算法(如快排、归并排序等),代替O(n^2)的排序算法(如冒泡、插入排序等)。
(3)异步处理。使用异步处理,能够避免程序由于等待某个资源而一直阻塞,从而提高程序的并发处理能力。把轮询替换为事件通知,就能够避免轮询耗费CPU的问题。
(4)多线程代替多进程。相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,所以能够下降上下文切换的成本。
(5)善用缓存。常常访问的数据或者计算过程当中的步骤,能够放到内存中缓存起来,在下次用时就能直接从内存中获取,加快程序的处理速度。node

2、系统优化

一、CPU绑定

(1)CPU绑定:把进程绑定到一个或者多个CPU上,能够提升CPU缓存的命中率,减小跨CPU调度带来的上下文切换问题。
(2)CPU孤立:将CPU分组,并经过CPU Affinity机制为其分配进程。指定CPU由特定进程独占,不容许其它进程再使用。算法

二、进程CPU资源限制

使用Linux cgroups来设置进程CPU使用上限,能够防止因为某个应用自身的问题,而耗尽系统资源。缓存

三、进程优先级调整

使用nice调整进程优先级,正值调低优先级,负值调高优先级。适当下降非核心应用的优先级,增高核心应用的优先级,能够确保核心应用获得优先处理。多线程

四、中断负载均衡

不管软中断仍是硬中断,中断处理程序均可能会耗费大量CPU资源。开启irqbalance服务或者配置smp_affinity能够把中断处理过程自动负载均衡到多个CPU上。架构

五、NUMA优化

NUMA架构处理器会被划分为多个node,每一个node都有本身的本地内存空间。NUMA优化可让CPU尽量只访问本地内存。并发

相关文章
相关标签/搜索