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 上,
Brendan Gregg
性能優化大師
學習筆記
整理自極客時間:《Linux性能優化實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/110663.html
標籤:Linux
上一篇:Linux 軟中斷
