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儘可能只訪問本地內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章