經過優化後Python腳本在Fedora 32上的運行速度可提高約27%
計劃於4月發布的Fedora 32有望給Python開發者帶來驚喜。Fedora項目的變更介紹頁面顯示,在構建Python解釋器時,開發團隊添加了-fno-semantic-interposition
編譯器/鏈接器標誌(compiler/linker flag),它將會顯著提升性能,當然具體的性能改進效果取決於工作負載,官方提供的數據是最多可以提升27%。
諸如nbody,scimark,django,光線跟踪之類的測試用例提升了20% 至27% 的性能,而通過PyPerformance 測得的性能提高了5% 至20%。
而這給用戶帶來的變化是他們將不再能夠使用LD_PRELOAD 覆蓋來自libpython 的符號,不過官方認為這是提升速度的不錯的折衷方案。
根據GCC關於語義插入(semantic interposition)標記的文檔,“某些對象格式,例如ELF,允許動態鏈接器插入符號。這意味著對於從DSO導出的符號,編譯器無法按預期在執行過程中傳播、內聯和其他優化,但相關的函數或變量會有變化。儘管該功能很有用,例如,通過調試實現重寫內存分配功能,但這在代碼質量方面是昂貴的。使用-fno-semantic-interposition
,編譯器假定如果函數發生插入的情況,則覆蓋函數將具有完全相同的語義(和副作用)。類似的,如果變量發生插入的情況,則變量的構造函數也將相同。該標誌對顯式聲明為內聯的函數無效,對弱聲明的符號同樣無效。”
據了解,這些改進最初是針對Fedora 32開發的,Fedora項目的開發人員當時在研究靜態鏈接Python的方案以提高性能。後來由於社區的反饋,他們縮小了範圍,只希望優化Fedora 32中的Python,並將其限制為使用-fno-semantic-interposition
編譯器標誌來構建Python。