TranslateProject/translated/talk/20141125 Four ways Linux is headed for no-downtime kernel patching.md

4.4 KiB
Raw Blame History

四招搞定Linux内核热补丁

Credit: Shutterstock Credit: Shutterstock

多种技术在竞争成为实现inux内核热补丁的最优方案。
没人喜欢重启机器,尤其是涉及到一个内核问题的最新补丁程序。
为达到不重启的目的目前有3个项目在朝这方面努力将为大家提供对内核进行运行时打热补丁的机制这样就可以做到完全不重启机器。

Ksplice项目

首先要介绍的项目是Ksplice它是热补丁技术的创始者并于2008年建立了与项目同名的公司。Ksplice在替换新内核时不需要预先修改只需要一个diff文件将内核的修改点列全即可。Ksplice公司免费提供软件但技术支持是需要收费的目前能够支持大部分常用的Linux发行版本。

但在2011年Oracle收购了这家公司后,情况发生了变化。 这项功能被合入到Oracle的Linux发行版本中且只对Oralcle的版本提供技术更新。 这就导致其他内核hacker们开始寻找替代Ksplice的方法以避免缴纳Oracle税。

Kgraft项目

2014年2月Suse提供了一个很好的解决方案Kgraft该技术以GPLv2/GPLv3混合许可证发布且Suse不会将其作为一个专有的实现。Kgraft被提交到Linux内核主线很有可能被内核主线采用。目前Suse已经把此技术集成到Suse Linux Enterprise Server 12

Kgraft和Ksplice在工作原理上很相似都是使用一组diff文件来计算内核中需要修改的部分。但与Ksplice不同的是Kgraft在做替换时不需要完全停止内核。 在打补丁时,正在运行的函数可以先使用老版本中对应的部分,当补丁打完后就可以切换新的版本。

Kpatch项目

Red Hat也提出了他们的内核热补丁技术。同样是在今年年初 -- 与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在2014年11月初提出了第四种解决方案。将Kgraft和Kpatch结合起来, 补丁包用这两种方式都可以。在新的方法中Jennings提出“热补丁核心为其他内核模块提供了热补丁的注册机制” 通过这种方法,打补丁的过程 -- 更准确的说,如何处理运行时内核调用 --可以被更加有序的进行。

这项新建议也意味着两个方案都还需要更长的时间才能被linux内核正式采纳。尽管Suse步子迈得更快并把Kgraft应用到了最新的enterprise版本中。让我们也关注一下Red Hat和Linux官方近期的动态。


via: http://www.infoworld.com/article/2851028/linux/four-ways-linux-is-headed-for-no-downtime-kernel-patching.html

作者:Serdar Yegulalp 译者:coloka 校对:校对者ID

本文由 LCTT 原创翻译,Linux中国 荣誉推出