❶ linux cpu管理(一) cpu初始化
本文基於以下軟硬體假定:架構:AARCH64;內核版本:5.14.0-rc5。
為何需要管理CPU?CPU作為計算機系統核心,主要執行運算和控制功能。傳統單核系統無需特別管理CPU。然而,隨著晶元頻率提升,性能瓶頸凸顯。為提升性能,晶元廠商採用集成多個相同CPU核心的多處理器系統(SMP)。啟動階段主要執行鏡像載入和軟硬體初始化,SMP系統通常由主CPU執行,而其他CPU在操作系統初始化後啟動。SMP系統強大,但高計算能力並非所有場景所需。移動設備等場景下,高效管理CPU能顯著降低功耗,延長續航能力。
CPU管理的關鍵在於精細功耗控制。負載較低時,調低頻率和電壓;CPU空閑時關閉時鍾;某些CPU完全移除系統。實現這些功能,硬體支持與軟體驅動及管理策略不可或缺。內核提供CPU管理模塊,本文將分步介紹其原理與實現:(1)CPU參數初始化流程;(2)SMP CPU啟動流程;(3)CPU熱插拔原理與實現;(4)CPU空閑原理與實現;(5)CPU動態電壓和頻率調整(DVFS)原理與實現。本文重點闡述CPU參數初始化流程,包括內核如何標識CPU ID、組織CPU拓撲結構、定義CPU狀態。
標識CPU ID,ARM64系統為每個處理器分配的mpidr寄存器記錄親和度。每個處理器具有唯一ID,用於標識硬體ID。通過dts配置,將硬體ID抽象為邏輯ID,便於統一管理。啟動時,primary CPU硬體ID從mpidr寄存器讀取,secondary CPU通過dts獲取硬體ID。
初始化CPU拓撲結構,現代處理器採用超線程、socket、core等層次組織。ARM64架構中,soc支持多個cluster,每個cluster包含多個core。解析devicetree配置信息,填充CPU拓撲結構體,描述線程ID、core ID、cluster ID、cache ID和兄弟CPU。計算cpu算力,歸一化最大cpu算力,其他cpu按比例換算,供調度器負載均衡時參考。
定義CPU狀態,內核使用bitmask管理CPU可能存在的狀態、可用狀態、在線狀態和激活狀態。設置流程包括檢查啟動回調函數、啟動或熱插拔過程中的狀態轉移。通過cpumask結構體表示狀態,內核提供狀態標識和操作函數。
❷ Linux內核進程管理之SMP調度
Linux文件系統詳解
一文透徹了解缺頁異常
ARM架構處理器解析【最全的一篇!】
Linux內核操作系統: 內存映射(圖文詳解)!
代碼大佬的【Linux內核開發筆記】分享,前人栽樹後人乘涼!
Linux文件系統詳解
深入理解Linux內核中的文件系統架構和操作,提供實用的編程技巧和解決方案。
一文透徹了解缺頁異常
詳細解析Linux內核中缺頁異常的原理和處理機制,包括系統調用和內核線程介面。
ARM架構處理器解析【最全的一篇!】
全面解析ARM架構處理器的特性、設計原理以及在Linux內核中的應用。
Linux內核操作系統: 內存映射(圖文詳解)!
詳細介紹Linux內核中內存映射的工作原理、實現機制及其在系統設計中的重要性。
代碼大佬的【Linux內核開發筆記】分享,前人栽樹後人乘涼!
分享Linux內核開發過程中的技巧、經驗和最佳實踐,幫助開發者提高編程技能和效率。
SMP調度詳解
深入分析SMP系統中的進程調度策略,包括處理器親和性設置、調度類拓展、負載均衡演算法等關鍵概念。
進程的cpu親和性設置
解釋如何通過系統調用和API介面來設置進程的cpu親和性,以及內核線程的相關操作。
使用cpuset配置
闡述管理員如何使用cpuset管理進程的處理器親和性和內存資源分配,以及與cgroup的整合。
調度器的拓展
介紹SMP系統中調度器的擴展特性,包括進程的cpu負載均衡和優先順序調整機制。
公平調度類的cpu負載均衡
詳解公平調度類在多處理器系統中的負載均衡實現,關注進程遷移策略和負載均衡演算法。
實時調度類的cpu負載均衡
分析實時調度類如何在處理器負載均衡中實現動態調整,以保證關鍵進程的優先順序。
公平運行隊列的計算與負載均衡
闡述公平運行隊列的計算方法,以及如何基於這些信息執行處理器負載均衡策略。
遷移線程與主動負載均衡
解釋遷移線程在SMP調度中的作用,包括處理遷移請求和執行主動負載均衡的過程。
隔離處理器
說明如何通過引導內核參數來隔離特定處理器,避免它們參與SMP負載均衡。
Linux內核進程管理之SMP調度
總結SMP系統中進程管理的核心概念、實現機制以及最佳實踐,為開發者提供深入理解與高效應用的指南。