全部產品
Search
文件中心

Alibaba Cloud Linux:通過/proc/cpuinfo擷取CPU頻率最佳化說明

更新時間:Oct 22, 2024

當多個線程或進程同時並發讀取/proc/cpuinfo檔案時,系統會向各個CPU核心發送IPI(Inter-Processor Interrupt),以擷取頻率相關的最新資料,這將觸發大量等待的IPI,形成了IPI Storm(IPI風暴),從而降低了系統效能和響應速度。針對該問題,阿里雲對x86架構下的Alibaba Cloud Linux 3(核心5.10.134-17.al8及更高版本)進行了最佳化。

最佳化方案說明

  • 為瞭解決IPI風暴問題,設定所有並發擷取CPU頻率的線程或進程均需拿到一份最近的備份資料,該備份資料使用atomic_xchg()來進行原子交換操作,以檢查和更新欄位值,並且失效時間大約為20 ms。擷取CPU頻率的任務超過該失效時間才會發起新的smp_call_function_single()調用來請求更新資料,避免同一時間段內向同一個CPU重複發送大量中斷。

  • 通過/proc/cpuinfo擷取CPU頻率時,系統會向所有CPU發送IPI訊息,此方式會導致原本處於idle(閑置)狀態的CPU被迫喚醒,在CPU喚醒過程中,其運行頻率會發生變化(由動態調度演算法決定)。為提高系統效率,我們對這種情況做了進一步的最佳化,當CPU處於idle狀態時,Alibaba Cloud Linux 3預設開啟NOHZ特性,系統將不再對其發起IPI請求,而是直接返回基礎頻率,從而避免不必要的CPU狀態變換帶來的頻率測量偏差。

優勢和負面效果說明

  • 優勢

    • 減少資源消耗:通過減少系統對IPI的不當使用,進一步降低了喚醒空閑CPU的需求,從而有效節省了處理器時間。

    • 最佳化整體效能:特別是在多核系統內容下,減少對其他CPU管理活動(如任務調度)的影響,保持系統高效穩定運行。

  • 負面效果說明

    該最佳化方案雖然能夠減少資源消耗並提升整體系統運行效能,但也導致通過/proc/cpuinfo擷取的idle狀態CPU頻率低於idle狀態的CPU頻率(造成“降頻”的假象),通過turbostat等工具直接讀取MSR仍可獲得準確的CPU頻率資料。