上游Linux 開發者反對”-O3″級別的內核優化
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 內核似乎不會追求這種更具侵略性、更激進的編譯器優化級別。