天天看點

Linux 4.0 不再需要重新開機

linux 4.0 裡,你可能再也不需要重新開機你的作業系統。

在大多數的伺服器或者資料中心裡,喜歡用linux的一個原因是你不需要頻繁的進行重新開機操作。誠然,某些關鍵性的更新檔必須要進行重新開機,但你也可以等到數月後再做此操作。現在,得益于 linux 核心的最新更新 你也許可以數年間都不用重新開機。

感謝 ksplice 項目,使得這一特性在2009年就可以實作。此項目在對原始和打過更新檔的核心進行比較後,使用一個定制的核心子產品将新的代碼加入到運作核心中。在支援ksplice的核心中,每個将被修補的功能都攜帶有一套特殊标志用以進行區分。ksplice程序會監視正在修補該函數的代碼是不是目前不在使用,當當,打上更新檔,你的伺服器上繼續運作。

oracle 在 2011 年收購了 ksplice 項目,并将其作為 rhel 的一項可選服務,使其應用于它自己的oracle linux 中(一個 rhel(red hat enterprise linux ) 的克隆版本)。這将此項技術隔離于其他企業版和伺服器版 linux 之外。

後來 kemelcare 為大部分企業發行版 linux 釋出了一項提供非啟動式更新檔服務。此程式作為專利軟體,隻能通過按月支付來享有此服務。這進而很難滿足大多數linux系統管理者。

是以,red hat 和 suse 開始着手完全開源的為 linux 安裝嚴重更新檔的非重新開機方案。red had 的項目命名為 kpatch, suse的項目命名為 kgraft.

兩個公司采用了不同的途徑。kpatch 釋出了一個 stop_machine() 指令。之後,它着眼于現有的棧處理去使用ftrace,如果打更新檔可以被做得很安全,它會重定向運作着的代碼到更新檔函數,而後就删除現在過時的代碼。

比過去好的是,資料中心被運作在世界各處,但是它們中的許多都需要一個21世紀式的重新開機。今天的資料中心必須更有效率,更有魯棒性和靈活性,這超過以往任何時候。我們檢查怎樣才能運作好你的資料中心,與之相對的是外包到一個雲或者一個服務提供商,或是采取混合的方式。

kgraft 一直使用ftrace,盡管它是工作線上程級的。當一個老的函數被調用,它會定位到線程的一個點,然後将其切換到新的函數。

雖然最終結果相同,即作業系統在打更新檔的時候保持運作,但還是有顯著的性能差異的。當kgraft可能花費數分鐘的時候,kpatch可以隻需要1到40毫秒,但他們從不會停機。

在2014年10月召開的linux 開發者大會上,兩個小組合二為一并且開始緻力于聯合最好的程式使linux打更新檔時不再重新開機。實際上,他們最終是把kpatch和kgraft都丢進了linux核心。

jiri kosina,一位suse軟體工程師和linux核心開發者解釋說,linux核心的熱更新檔将會“為函數提供一個基本基礎設施” 熱更新檔(例如:代碼重定向),包括為了包含實際更新檔的核心子產品的api(應用程式接口),和為了在使用者空間可以操作更新檔的api/abi(應用二進制接口),這是“相對簡單和簡約的,因為它盡可能多的利用了已有的核心基礎(名為ftrace)。它也是自包含的,在某種意義上說,它不在任何其他的核心子系統中調用自身(它甚至不接觸其他任何代碼)”

linux 4.0 rc 版現在已經放出,kosina 聲稱:”現在實施的x86架構隻是作為一個參考架構,對于powerpc, s390 和 arm 的支援工作已經在進行中了“。确實,對于這些架構的支援源代碼已經在 live patching git code 上了。

簡單的代碼僅僅隻是開始,你的發行版将通過更新檔來支援和使用它。随着 red hat 和 suse 的支援,live 更新檔将很快預設在所有商業linux發行版中。

繼續閱讀