總覽
Zircon 排程器是混合式排程器,支援公平和期限排程規範。它會在每個邏輯 CPU 上獨立執行,管理自己的執行佇列集,並透過處理器間中斷 (IPI) 與其他 CPU 協調。
排程器的主要目標是在競爭執行緒之間共用 CPU 頻寬,同時確保重要工作負載 (例如音訊、圖像和高頻感應器) 的時序需求。
排程學科
公平排程
公平調度是系統中一般用途工作負載的主要調度規範。它會將 CPU 頻寬分配給競爭執行緒,讓每個執行緒在一段時間內獲得加權比例的 CPU。
- 依權重分配:系統會為每個執行緒指派權重。如果某個執行緒的權重是其他執行緒的兩倍,則大約會獲得兩倍的 CPU 時間。
- 虛擬時間軸:系統會根據「虛擬完成時間」,在平衡二元樹 (WAVL 樹狀結構) 中排序就緒的執行緒。權重較高的執行緒會排在較前面,但權重較低的執行緒保證會及時執行,以防資源不足和無界優先權反轉。
- 排程週期:排程週期會根據競爭執行緒的數量調整。如果競爭的執行緒過多,系統會延長時間週期,確保每個執行緒至少都能取得 最低精細度的切片,進而提升總處理量。
如要深入瞭解 Fair Scheduling 演算法的數學和排序條件,請參閱「Fair Scheduler Mechanics」。
排定截止日期
對於需要嚴格時間保證的延遲關鍵工作,以及在過載情況下不得參與比例式減速的工作,系統支援排定截止時間。
- 保證:Deadline 工作會指定容量 (CPU 時間) 和期限 (時間範圍)。如果整體期限需求可行,排程器會保證工作在期限內獲得容量。
- 優先順序:有截止日的工作一律優先於符合資格的公平工作。
- 過載回應:為確保所有期限工作都能在預期時間內排定,期限需求總和不得超過處理器的容量。如果處理器的總期限需求超過 100%,預期會發生隨機期限錯過的情況,且系統的行為會如同部分或所有任務的週期都乘以過載係數。
- 優先順序極高:您可以視需要將截止日期設定檔標示為「優先順序極高」。在 CPU 超額訂閱期間,重要期限工作會獲得絕對優先權,優先於一般期限工作,確保重要工作負載不會因失控的標準期限執行緒而效能降低。在正常運作的系統中,重要使用率總和絕不會超過處理器的限制,否則系統會發出核心錯誤。
執行佇列和選取範圍
每個 CPU 都會維護三個主要執行佇列,並以擴增 WAVL 樹狀結構實作,以滿足有效率的 O(log n) 作業:
- 重要期限執行佇列:包含可執行的重要期限工作。
- Deadline Run Queue:包含可執行的非重大 Deadline 工作。
- 公平執行佇列:包含可執行的公平任務。
選取討論串
排程器選擇要執行的下一個執行緒時,會依下列順序評估佇列:
- 重要截止日期工作:選取符合資格的重要截止日期工作,並以最早的完成時間為準。
- 期限工作:選取符合資格且完成時間最早的期限工作。
- 公平工作:選取符合資格且虛擬完成時間最早的公平工作。
- 閒置/電源執行緒:沒有其他符合資格的執行緒時,就會執行這個執行緒。
先占和時間片段
排程器會根據所選執行緒的時間片段或期限工作抵達時間,設定 CPU 本機搶占計時器。計時器觸發時,目前執行緒會停止執行,排程器會重新評估哪個執行緒最適合接著執行。
CPU 安插和遷移
排程器會根據多項因素執行負載平衡和工作放置作業,以提升效能和熱效率。
刊登位置條件
當執行緒喚醒或解除封鎖時,排程器會根據下列項目選取目標 CPU:
- 親和性:系統會優先處理執行緒的使用者定義 CPU 親和性遮罩。
- 上次 CPU:在上次 CPU 上執行有助於保留快取暖度 (叢集內親和性)。
- 閒置狀態:如果核心避免忙碌 CPU 的內容切換負擔,則優先順序較高。
工作竊取
為維持負載平衡,沒有合格工作的 CPU 會嘗試從其他忙碌的 CPU 竊取工作。
- 叢集感知:排程器會留意 CPU 拓撲。CPU 竊取會優先處理本機叢集,而非遠端叢集,藉此充分利用較佳的共用快取效能等級,並減少遷移懲罰。
電力和能源意識
排程器會使用本機能源模型和電量控制功能,盡可能降低耗電量並提升散熱效能。
- 效能比例:在預算計算中,考量個別 CPU 效能乘數。
- 動態電壓和頻率調整 (DVFS):調整處理器工作負載,支援使用者定義的限制,同時盡量符合截止時間表。