上游 Linux 开发者反对"-O3"级别的内核优化

局长
 局长
发布于 2020年05月16日
收藏 6

WireGuard 作者 Jason A. Donenfeld 上周向 Linux 内核提交了一个补丁,他建议在使用新发布的 GCC 10 编译器或更高的版本时,将内核的默认编译优化级别由 -O2 设置为 -O3。

Jason 解释道,GCC 10 对 -O2 进行了改进,以便在使用 -flto 时缩短编译时间,不过这似乎是以牺牲性能为代价来实现的。而现在的 -O3 优化不存在和 10 年前同样的 bug,所以当 gcc >= 10 时,他提交的补丁会将 Linux 内核的编译优化默认设置为 -O3 级别。

对于这个提交,部分开发者表示有兴趣支持 -O3 优化级别的子集功能,甚至探索 -Og 级别的优化,并努力缩短构建内核花费的时间,以便于测试。

不过总体看来,将内核默认编译优化级别设置为 -O3 的提案遭到了广泛的反对,因为这不一定会让内核变得更快,反而有可能会引入因优化而导致出现的特殊特性,甚至会产生让代码变得更慢的地方。

Linus Torvalds 也进行了表态,他不认为这是一个明智的想法,尤其是 GCC -O3 级别的优化有时会导致出现问题。

GCC 开发者 Richard Biener 也写道,他不建议在内核中使用 -O3 级别的优化。他曾经提出使用 feedback/profile-driven 的数据让编译器做出更好优化决策的想法,但这会是一个非常庞大的任务,需要为 FDO 收集到足够的数据才能体会到方便之处。

因此,至少目前来看,Linux 内核似乎不会追求这种更具侵略性、更激进的编译器优化级别。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:上游 Linux 开发者反对"-O3"级别的内核优化
加载中

精彩评论

南湖船老大
南湖船老大
可是,之前这个eechen还在知乎吹嘘gcc的O3优化啊。
https://www.zhihu.com/question/42226391
eechen
eechen
过度优化是魔鬼.
我自己进行过一些简单的C程序测试,O3优化有时候比O2还慢:
1亿次二分查找:
gcc -Os binary_search.c -o binary_search && time ./binary_search
gcc -O2 binary_search.c -o binary_search && time ./binary_search
gcc -O3 binary_search.c -o binary_search && time ./binary_search
Os : O2 : O3 耗时对比 0m1.112s : 0m0.303s : 0m0.311s
1千万次冒泡排序:
gcc -Os bubble_sort.c -o bubble_sort && time ./bubble_sort
gcc -O2 bubble_sort.c -o bubble_sort && time ./bubble_sort
gcc -O3 bubble_sort.c -o bubble_sort && time ./bubble_sort
Os : O2 : O3 耗时对比 0m0.695s : 0m0.516s : 0m0.433s
总结:一般情况,建议使用-O2优化.

而且-O3优化,有时候会导致某些项目编译不通过.
Linus Torvalds虽然追求性能优先,但他这次表态反对-O3优化,也说明了-O3不是最好的选择.
eechen
eechen
可能那些个写Python和Java的,都没编译过大型C项目吧.
在Linux上写PHP的,倒是会经常编译最新版PHP.
编译过PHP的同学,看看configure后生成的Makefile,
就可以知道PHP编译默认也是采用 -O2 优化.

PHP还有个黑科技,可以针对特定应用进行特异性优化.
利用了GCC的PGO(Profile Guided Optimization).
不学无术的建议去看看鸟哥的博客吧:
http://www.laruence.com/2015/06/19/3063.html

最新评论(12

kut
kut
我以前LFS设的是-O6,现在想想都害怕。
南湖船老大
南湖船老大
可是,之前这个eechen还在知乎吹嘘gcc的O3优化啊。
https://www.zhihu.com/question/42226391
catroll
catroll
记性真好 @eechen 要不要反驳?
z
zjh6
谁又不曾错过?
MrD
MrD
错了?哪里错了?
eechen
eechen
过度优化是魔鬼.
我自己进行过一些简单的C程序测试,O3优化有时候比O2还慢:
1亿次二分查找:
gcc -Os binary_search.c -o binary_search && time ./binary_search
gcc -O2 binary_search.c -o binary_search && time ./binary_search
gcc -O3 binary_search.c -o binary_search && time ./binary_search
Os : O2 : O3 耗时对比 0m1.112s : 0m0.303s : 0m0.311s
1千万次冒泡排序:
gcc -Os bubble_sort.c -o bubble_sort && time ./bubble_sort
gcc -O2 bubble_sort.c -o bubble_sort && time ./bubble_sort
gcc -O3 bubble_sort.c -o bubble_sort && time ./bubble_sort
Os : O2 : O3 耗时对比 0m0.695s : 0m0.516s : 0m0.433s
总结:一般情况,建议使用-O2优化.

而且-O3优化,有时候会导致某些项目编译不通过.
Linus Torvalds虽然追求性能优先,但他这次表态反对-O3优化,也说明了-O3不是最好的选择.
me坤子
me坤子
php是最牛逼的语言,不接受反驳
eechen
eechen
可能那些个写Python和Java的,都没编译过大型C项目吧.
在Linux上写PHP的,倒是会经常编译最新版PHP.
编译过PHP的同学,看看configure后生成的Makefile,
就可以知道PHP编译默认也是采用 -O2 优化.

PHP还有个黑科技,可以针对特定应用进行特异性优化.
利用了GCC的PGO(Profile Guided Optimization).
不学无术的建议去看看鸟哥的博客吧:
http://www.laruence.com/2015/06/19/3063.html
me坤子
me坤子
大神,怀念PHP是最牛逼语言的年代
专业写BUG的程序员
专业写BUG的程序员
你为啥要扯上java。 你编译tomcat源码试试,也得半天。
bbdlg
bbdlg
谁反驳怼谁🙈
返回顶部
顶部