Linux核心熱補丁的四種技術

2021-08-14 21:57:48 字數 1454 閱讀 7612

有多種技術在競爭成為實現linux核心熱補丁的最優方案。

沒人喜歡重啟機器,尤其是涉及到乙個核心問題的最新補丁程式。

為達到不重啟的目的,目前有3個專案在朝這方面努力,將為大家提供核心公升級時打熱補丁的機制,這樣就可以做到完全不重啟機器。

首先要介紹的專案是ksplice,它是熱補丁技術的創始者,並於2023年建立了與專案同名的公司。ksplice在替換新核心時,不需要預先修改;只需要乙個diff檔案,列出核心即將接受的修改即可。ksplice公司免費提供軟體,但技術支援是需要收費的,目前能夠支援大部分常用的linux發行版本。

但在2023年oracle收購了這家公司後,情況發生了變化。 這項功能被合入到oracle自己的linux發行版本中,只對oralcle自己提供技術更新。 這就導致,其他核心hacker們開始尋找替代ksplice的方法,以避免繳納oracle稅。

2023年2月,suse提供了乙個很好的解決方案:kgraft,該核心更新技術以gplv2/gplv3混合許可證發布,且suse不會將其作為乙個專有發明封閉起來。kgraft被提交到linux核心主線,很有可能被核心主線採用。目前suse已經把此技術整合到suse linux enterprise server 12。

kgraft和ksplice在工作原理上很相似,都是使用一組diff檔案來計算核心中需要修改的部分。但與ksplice不同的是,kgraft在做替換時,不需要完全停止核心。 在打補丁時,正在執行的函式可以先使用老版本或新核心中對應的部分,當補丁打完後就可以完全切換新的版本。

red hat也提出了他們的核心熱補丁技術。同樣是在2023年初 – 與suse在這方面的工作差不多 – kpatch的工作原理也和kgraft相似。

主要的區別點在於,正如red hat的josh poimboeuf總結的那樣,kpatch並不將核心呼叫重定向到老版本。相反,它會等待所有函式呼叫都停止時,再切換到新核心。red hat的工程師認為這種方法更為安全,且更容易維護,缺點就是在打補丁的過程中會帶來更大的延遲。

和kgraft一樣,kpatch不僅僅可以在red hat的發行版本上使用,同時也被提交到了核心主線,作為乙個可能的候選。 壞訊息是red hat還未將此技術整合到產品中。 它只是被合入到了red hat enterprise linux 7的技術預覽版中。

…也許 kgraft + kpatch更合適?

red hat的工程師seth jennings在2023年11月初,提出了第四種解決方案。將kgraft和kpatch結合起來, 補丁包用這兩種方式都可以。在新的方法中,jennings提出,「熱補丁核心為其他核心模組提供了乙個熱補丁的註冊介面」, 通過這種方法,打補丁的過程 – 更準確的說,如何處理執行時核心呼叫 –可以被更加有序的組織起來。

這項新建議也意味著兩個方案都還需要更長的時間,才能被linux核心正式採納。儘管suse步子邁得更快,並把kgraft應用到了最新的enterprise版本中。讓我們也關注一下red hat和canonical近期是否會跟進。

不重啟不當機!Linux核心熱補丁的四種技術

供圖 shutterstock 有多種技術在競爭成為實現linux核心熱補丁的最優方案。沒人喜歡重啟機器,尤其是涉及到乙個核心問題的最新補丁程式。為達到不重啟的目的,目前有3個專案在朝這方面努力,將為大家提供核心公升級時打熱補丁的機制,這樣就可以做到完全不重啟機器。首先要介紹的專案是ksplice,...

Linux熱補丁的實現

如果要修改乙個已經編譯完成的可執行檔案中某個函式的執行流程,有2種方式 這裡討論第2種方式,即熱補丁 hotpatch 下面分別介紹下這2種方式的實現。先在可執行檔案中找到儲存函式的的位址prelocate 在程式的relocation section 儲存原始函式的位址poriginal 即 pr...

Linux 4 1核心熱補丁成功實踐

最開始公司運維同學反饋,個別宿主機上存在程序cpu峰值使用率異常的現象。而數萬臺機器中只出現了幾例,也就是說萬分之幾的概率。監控產生的些小誤差,不會造成宕機等嚴重後果,很容易就此被忽略了。但我們考慮到這個異常轉瞬即逝 並不易被察覺,可能還存在更多這樣的機器,又或者現在正常將來又不正常,核心研發本能的...