Plugsched 實戰解讀:如何在不中斷業務時對 Linux 核心排程器熱升級? | 龍蜥技術

語言: CN / TW / HK

*編者按:* 隨著 Linux 核心的不斷更新迭代,程式碼變得越來越繁重。排程器是核心最核心的子系統之一,它的結構複雜,與其它子系統緊密耦合,這使得開發和除錯變得越發困難。Plugsched 是 Linux 核心排程器子系統熱升級的 SDK,它可以實現在不重啟系統、應用的情況下動態替換排程器子系統,毫秒級 downtime。本文整理龍蜥大講堂第 18 期 精彩分享影片回放已上傳至龍蜥官網(首頁-動態-影片),歡迎檢視!

以下是龍蜥社群 Kernel SIG 核心成員分享《關於 Plugsched 排程器熱升級》部分精彩內容(完整影片回放和技術 PPT 獲取方式見文末)。

Plugsched 是 Linux 核心排程器子系統熱升級的 SDK,它可以實現在不重啟系統、應用的情況下動態替換排程器子系統,毫秒級 downtime。Plugsched 可以對生產環境中的核心排程特性動態地進行增、刪、改,以滿足不同場景或應用的需求,且支援回滾。目前已經在龍蜥社群開源了。

開源地址:

https://gitee.com/anolis/plugsched

隨著 Linux 核心的不斷更新迭代,程式碼變得越來越繁重。排程器是核心最核心的子系統之一,它的結構複雜,與其它子系統緊密耦合,這使得開發和除錯變得越發困難。而且,排程器內嵌在核心中,應用新的排程器需要更換核心,這在叢集中代價比較昂貴。再者,目前不存在子系統範圍的熱升級方案,kpatch、livepatch 是函式粒度的熱升級方案,eBPF 目前還不支援排程器。對於排程器而言,由於應用場景及其特徵的多樣性,使得排程策略的優化比較複雜,尤其在雲場景下,不存在“一勞永逸”的策略,因此,允許使用者定製排程器滿足不同的場景是必要的。

基於以上背景,Plugsched 誕生了,它能將排程器子系統從核心中提取出來,以模組的形式對核心排程器進行熱升級。通過對排程器模組的修改,能夠針對不同業務定製化排程器,而且使用模組能夠更敏捷的開發新特性和優化點,並且可以在不中斷業務的情況下上線。

本文從 plugsched 的 背景、優勢、應用場景和原理四個方面展開分享,通過一個實際案例體現出 plugsched 的價值所在,最後給大家進行了實際操作的演示,演示過程中,詳細介紹了 plugsched 如何使用、每一步的操作如何進行以及背後的工作是什麼。

圖片

圖片

圖片圖片圖片

接下來是演示過程,可以參考開源倉庫的 Readme 中的 Quick Start 章節,Plugsched SDK 提供了 容器化的開發環境,通過實際操作,可以很快學會如何使用它(演示影片已上傳至龍蜥官網,歡迎檢視)。

最後,講師與線上聽眾進行了 Q&A 互動,本文主要摘錄以下 5 個問題:

Q:回滾之後,核心原來的排程器如何重新生效?

A:安裝排程器包後,相當於系統中存在兩個排程器,一個是核心原有的排程器,另一個是新安裝的排程器。安裝新的排程器安裝後,核心原有的排程器相當於被旁路掉了。當新的排程器包被解除安裝(回滾)後,核心原有的排程器相當於被重新 enable,會自動生效。

Q:Plugsched 與 sched eBPF 有什麼區別?

A:目前,上游社群還不支援排程器 eBPF 的 hook 點,即便是支援了,也只能支援區域性策略的修改,可修改能力有限。而且 eBPF 不能實現很複雜的修改,它的檢查機制很嚴格,不能實現複雜的邏輯,修改能力進一步受限。

Q:Google 的 ghOSt,似乎是和 plugsched 做類似的工作?兩者有什麼區別?

A:ghOSt 與 plugsched 面向的場景不同,效能也不同。ghOSt 有兩種工作模式,local 模式開銷較大,每次排程要多經歷一次上下文切換,即切入切出使用者態排程器軟體,所以只能在一些延遲要求不高的場景用。而 global 模式過度依賴 IPI,IPI 的開銷會導致排程不及時,增加延時。再者,ghOSt 針對無核心開發經驗的使用者態軟體開發者,容錯性比較高,但是效能相對較差,只能用於部分場景。plugsched 依舊針對核心開發者,要求開發者有與傳統核心同樣的開發經驗,但是為核心開發者降低開發、測試、上線、回滾的難度,效能好,能用於絕大部分場景。

Q:Plugsched 在做模組化的過程中開銷如何?

A:對於模組化的開銷,可以不需要太關注,因為這個過程是 offline 的,而且生成排程器模組後,可以持續修改和生成 RPM 包。對於它的開銷,演示過程使用的環境是 64 核 CPU,生成排程器模組的時間大約是 2-3 分鐘,應為它需要編譯一次核心,開銷並不是很高。

Q:系統重啟或者更換核心是否有影響?

A:plugsched 支援安裝多核心版本的排程器包,就像可以同時安裝多個版本的核心一樣。當系統重啟後,plugsched 會自動識別並安裝當前核心版本的排程器模組,即便是不存在對應核心版本的排程器,也不會安裝其它核心版本的排程器模組。因此,系統重啟或更換核心並沒有什麼影響。

關於回放和課件獲取

【影片回放】:影片回訪已上傳至龍蜥官網 https://openanolis.cn/video

【PPT課件獲取】:關注微信公眾號(OpenAnolis),回覆 “龍蜥課件”  即可獲取。有任何疑問請隨時諮詢龍蜥助手—小龍(微信:openanolis_assis)。

Plugsched 相關閱讀:

龍蜥開源Plugsched:首次實現 Linux kernel 排程器熱升級

歡迎更多開發者加入Kernel SIG:

網址:https://openanolis.cn/sig/Cloud-Kernel

郵件:**[email protected]****

—— 完 ——