赞
踩
安迪-克莱恩(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)表示,他正在使用这个选项,并打算也以这种方式构建生产内核。 与往常一样,我们对纯二进制模块发行商遇到的困难并不同情。 如果内核黑客们认为这个选项值得一用,他们不会让一些坏掉的二进制模块阻止他们。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。