太激進(jìn)了!上游 Linux 開(kāi)發(fā)者反對(duì)“-O3”級(jí)別的內(nèi)核優(yōu)化
WireGuard 作者 Jason A. Donenfeld 上周向 Linux 內(nèi)核提交了一個(gè)補(bǔ)丁,他建議在使用新發(fā)布的 GCC 10 編譯器或更高的版本時(shí),將內(nèi)核的默認(rèn)編譯優(yōu)化級(jí)別由 -O2 設(shè)置為 -O3。
Jason 解釋道,GCC 10 對(duì) -O2 進(jìn)行了改進(jìn),以便在使用 -flto 時(shí)縮短編譯時(shí)間,不過(guò)這似乎是以犧牲性能為代價(jià)來(lái)實(shí)現(xiàn)的。而現(xiàn)在的 -O3 優(yōu)化不存在和 10 年前同樣的 bug,所以當(dāng) gcc >= 10 時(shí),他提交的補(bǔ)丁會(huì)將 Linux 內(nèi)核的編譯優(yōu)化默認(rèn)設(shè)置為 -O3 級(jí)別。
對(duì)于這個(gè)提交,部分開(kāi)發(fā)者表示有興趣支持 -O3 優(yōu)化級(jí)別的子集功能,甚至探索 -Og 級(jí)別的優(yōu)化,并努力縮短構(gòu)建內(nèi)核花費(fèi)的時(shí)間,以便于測(cè)試。
不過(guò)總體看來(lái),將內(nèi)核默認(rèn)編譯優(yōu)化級(jí)別設(shè)置為 -O3 的提案遭到了廣泛的反對(duì),因?yàn)檫@不一定會(huì)讓內(nèi)核變得更快,反而有可能會(huì)引入因優(yōu)化而導(dǎo)致出現(xiàn)的特殊特性,甚至?xí)a(chǎn)生讓代碼變得更慢的地方。
Linus Torvalds 也進(jìn)行了表態(tài),他不認(rèn)為這是一個(gè)明智的想法,尤其是GCC -O3 級(jí)別的優(yōu)化有時(shí)會(huì)導(dǎo)致出現(xiàn)問(wèn)題。
GCC 開(kāi)發(fā)者 Richard Biener 也寫(xiě)道,他不建議在內(nèi)核中使用 -O3 級(jí)別的優(yōu)化。他曾經(jīng)提出使用 feedback/profile-driven 的數(shù)據(jù)讓編譯器做出更好優(yōu)化決策的想法,但這會(huì)是一個(gè)非常龐大的任務(wù),需要為 FDO 收集到足夠的數(shù)據(jù)才能體會(huì)到方便之處。
因此,至少目前來(lái)看,Linux 內(nèi)核似乎不會(huì)追求這種更具侵略性、更激進(jìn)的編譯器優(yōu)化級(jí)別。