linux编译c 优化,Linux性能优化——CPU性能调优
Posted weixin_39890543
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux编译c 优化,Linux性能优化——CPU性能调优相关的知识,希望对你有一定的参考价值。
一、应用程序优化
(1)编译器优化。适当开启编译器优化选项,在编译阶段提升性能。gcc提供优化选项-On会自动对应用程序的代码进行优化。
(2)算法优化。使用复杂度更低的算法,可以显著加快处理速度。在数据比较大的情况下,可以用O(nlogn)的排序算法(如快排、归并排序等),代替O(n^2)的排序算法(如冒泡、插入排序等)。
(3)异步处理。使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。把轮询替换为事件通知,就可以避免轮询耗费CPU的问题。
(4)多线程代替多进程。相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。
(5)善用缓存。经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,在下次用时就能直接从内存中获取,加快程序的处理速度。
二、系统优化
1、CPU绑定
(1)CPU绑定:把进程绑定到一个或者多个CPU上,可以提高CPU缓存的命中率,减少跨CPU调度带来的上下文切换问题。
(2)CPU孤立:将CPU分组,并通过CPU Affinity机制为其分配进程。指定CPU由特定进程独占,不允许其它进程再使用。
2、进程CPU资源限制
使用Linux cgroups来设置进程CPU使用上限,可以防止由于某个应用自身的问题,而耗尽系统资源。
3、进程优先级调整
使用nice调整进程优先级,正值调低优先级,负值调高优先级。适当降低非核心应用的优先级,增高核心应用的优先级,可以确保核心应用得到优先处理。
4、中断负载均衡
无论软中断还是硬中断,中断处理程序都可能会耗费大量CPU资源。开启irqbalance服务或者配置smp_affinity可以把中断处理过程自动负载均衡到多个CPU上。
5、NUMA优化
NUMA架构处理器会被划分为多个node,每个node都有自己的本地内存空间。NUMA优化可以让CPU尽可能只访问本地内存。
以上是关于linux编译c 优化,Linux性能优化——CPU性能调优的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )
Linux 内核 内存管理优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )