recientemente 一封電子郵件已發布 通過Linux Kernel郵件列表,此電子郵件的主要目的是 從x32子架構實現中刪除代碼 (不要與x86 IA-32混淆)。
這使您可以使用32位內存尋址模型 在x86 86位系統上(混合x64和x86_64)。
x32架構是什麼?
重要的是要提到x32子體系結構是x86_64 ABI的混合體,它允許在32位系統上使用64位存儲器尋址模型(處理器以64位模式運行,但使用32位指針和算術運算)。
艾比X32 允許應用程序充分利用x86_64架構,例如附加寄存器和更快的指令PIC ABI。
同時,ABI X32支持32位內存指針,這可以節省內存,有助於更高效地填充處理器緩存,並對代碼執行的整體速度產生積極影響。
ABI X32的局限性是無法從應用程序定向4 GB以上的內存。
自32年3.4月成立以來,X2012支持一直是Linux內核XNUMX的一部分。
開發人員將辯論是否繼續維護此體系結構
根據開發人員建議刪除x32技術 它是沒有道理的,也沒有在現代工業佈局中找到實際的應用。
而且l x32代碼使用頗有爭議的方法來處理系統調用,這會在處理系統調用實現後產生中斷正常運行的風險。
萊納斯·托瓦爾茲(Linus Torvalds)表示,如果不提交任何參數,他將同意刪除x32 或未顯示已應用x32子體系結構的系統。
萊納斯 他還指出,x32體系結構的使用顯然僅限於極限性能測試。之所以如此,是因為對該子體系結構的支持與維護髮行版和開發環境方面的大量麻煩有關。
郵件:
大家好。
我正在認真考慮提交補丁程序以從Linux刪除x32支持。 這是與此有關的一些問題:
- 尚不清楚它是否有用戶。 據我所知,它在Gentoo和Debian上受支持
- 呼叫系統的工作方式非常奇怪。 x32上的大多數係統調用都通過其本機*(即不是COMPAT_SYSCALL_DEFINE)與入口點一起輸入,這是有意的。
例如,adjtimex()使用本機輸入,而不是compat輸入,因為x32 struct timex與x86_64佈局匹配。 但是少數係統調用具有單獨的入口點-這些系統調用始於512。
這些通過COMPAT_SYSCALL_DEFINE入口點輸入。
不在32範圍內的X512 syscall違反了內核syscall約定的所有相似之處。
在syscall處理程序中,in_compat_syscall()返回true,但是沒有調用COMPAT_SYSCALL_DEFINE條目,這很瘋狂,並且當人們重構其syscall實現時,您冒著破壞事物的風險。
最重要的是,沒有人會嘗試這些事情。
有一次 在測試x32時,一位Gentoo開發人員得出結論,切換到ABI x32時的性能改進不如綜合測試所示。 來自ABI x32的製造商:
僅當與以前的x86架構相比時,才可以看到顯著的進步,但是與當前的x86-64架構相比,增益是微不足道的(與經典的ABI x32_40測試相比,x86的創建者進行的SPEC測試顯示高達64%的加速) H.264編解碼器顯示了15-20%的加速度)。