【翻译】 用 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)表示,他正在使用这个选项,并打算也以这种方式构建生产内核。 与往常一样,我们对纯二进制模块发行商遇到的困难并不同情。 如果内核黑客们认为这个选项值得一用,他们不会让一些坏掉的二进制模块阻止他们。

本文索引条目
内核构建系统
内核GCC
内核优化工具


(登录以发表评论)

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值