当前位置:   article > 正文

【翻译】 用 gcc 缩小内核 [发布于 2004 年 1 月 21 日 作者 corbet]

【翻译】 用 gcc 缩小内核 [发布于 2004 年 1 月 21 日 作者 corbet]
对于大多数 Linux 用户来说,内核随着时间的推移不断增长并不奇怪。 一般来说,内核的扩展被其所运行的系统日益强大的功能所抵消,但内核的臃肿还是要付出代价的。 额外的内存和其他开销(如缓存未命中)都会损害系统的整体性能。

安迪-克莱恩(Andi Kleen)一直在努力通过使用一些相对较新且不常用的 gcc 选项来缩小内核。 和大多数内核缩减器一样,他从-Os 开始;这个选项只是告诉编译器针对大小进行优化,而不是严格针对性能进行优化。 传闻证据表明,-Os不仅能生成更小的内核,而且生成的代码通常也能运行得更快。

下一步是使用-funit-at-a-time。 这是一个新选项;它将成为即将发布的 gcc 3.4 版本的一部分。 它能让编译器在开始生成代码前将整个源文件加载到内存中,从而更好地内联和删除未使用的函数。 结果是内核文本大小减少了 3%多一点。 缩减的原因需要进一步研究;可能是内核中存在大量死代码。

最后,Andi 还启用了-mregparm=3,指示编译器在寄存器中传递最多三个函数参数,而不是堆栈。 这个选项比-funit-at-a-time 更有帮助。 使用这三个选项,Andi 可以将文本大小减少 700KB 以上。

不过,-mregparm=3 有一个潜在问题:它会改变内核中的调用习惯,从而破坏二进制模块。 可以想象,一些内核开发者比其他开发者更担心这个问题。 红帽内核打包者阿尔扬-范-德-文(Arjan van de Ven)表示,他正在使用这个选项,并打算也以这种方式构建生产内核。 与往常一样,我们对纯二进制模块发行商遇到的困难并不同情。 如果内核黑客们认为这个选项值得一用,他们不会让一些坏掉的二进制模块阻止他们。



(登录以发表评论)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/1007141
推荐阅读
相关标签
  

闽ICP备14008679号