https://lwn.net/Articles/733405/

文侑

我曾经见过某位内核研发同学修改了一个配置,折腾了一天编译问题都没解决。我完全理解他,换了别人很可能也是这样。

我觉得这篇文章直接戳到目前 linux 内æ ¸裁剪的痛点:乍一看,束手无策!

大概说一下这篇文章提到的一些 points:

  1. Linus Torvalds called it “one of the worst parts of the whole project”, 这句话我不准备翻译

  2. Junghwan Kang 想做一件事:最小化攻击面,就是不要的功能全都都从内核拿掉,然后发现不知道该怎么入手

  3. Kang 尝试了目前的两种方法:undertaker-tailor 和 make localmodconfig, 前者是通过 ftrace 来追实际业务跑起来时候内核的调用路径,最终产生相应的编译选项,后者就是根据目前编译进内核的和系统中已经加载的模块,来假定是业务需要的,最终来产生内核编译选项生成内核。

注:前者可能不准,显然很可能遗漏某些冷路径;后者可能又太重,有些可能并不是业务场景实际需要的

  1. Kang 搞了一个自动化的模型,先用 undertaker-tailor,来确定哪些是业务会实际用到的(一个最小子集,很可能没法跑或者出错),然后再根据 make localmodconfig 来逐步增加选项直到在模拟系统中编译,以及业务模拟没问题。目前这个模型还没有对外开源

我想说的是,以上方法更适合一些新手,或者业务模型非常简单的情况。如果要想真正做好的东西,你需要了解这些编译选项的细节,内在关联,等等,剔除真正不需要的,保留需要的最小子集,也就是:一个都不多,一个都不少。实际的场景会复杂很多,通过这种模拟到底能达到覆盖多少 corener case?如果要达到业界领先的产品,需要知道你到底在干什么,上面这种方法恐怕不行,另外,很可惜目前开源社区这块也没有一个统一可行的方法。不过无论如何,还是去尽量了解这些编译选项背后的故事吧。想偷懒,又想出好活,没有这样的事啊。linux 的好处是什么都有,坏处也是什么都有。话说这玩意能用机器学习来折腾折腾?