01.22 紅帽工程師開發可用於物聯網設備的輕量級JIT編譯器MIR

紅帽的軟件開發工程師Vladimir Makarov在開發者博客提到,他現在正開發一個輕量級JIT編譯器(MIR,Medium Internal Representation),編譯速度與啟動速度將比GCC或LLVM快100倍,作為現有MJIT編譯器的補充,或是在現有JIT編譯器無法作用時,成為替代方案。

紅帽工程師開發可用於物聯網設備的輕量級JIT編譯器MIR

Vladimir Makarov提到,過去社群花費了大量的時間,對GCC和LLVM進行優化,除了改善可靠度,同時也創建了許多工作基礎,因此其他人可以使用這些成果,快速地以GCC或LLVM接口來實例JIT,他們也以這些現有的編譯器,開發了CRuby JIT。

不過,這其中存在了許多缺點,其中一大缺點,便是以GCC或LLVM作為基礎的JIT程序通常很大,CRuby 2.6本身超過150萬行程序代碼,而龐大的程序代碼量對於雲計算、物聯網和移動設備上的應用,目前仍是很大的問題。

紅帽工程師開發可用於物聯網設備的輕量級JIT編譯器MIR

而且GCC和LLVM的編譯速度也很慢,雖然在英特爾的高端CPU只要花費20毫秒,但對於物聯網設備使用的較低端CPU,可能需要花上半秒鐘,另外,現有GCC和LLVM JIT,難以使用不同程序語言開發的程序代碼,實例組合優化,Vladimir Makarov提到,內聯函數是一個提高JIT性能最重要的優化,因為方法的調用成本很高,而且內聯也允許更大範圍的優化,但是現在要將用C編寫的方法,內聯到以Ruby撰寫的方法中仍是一個問題。

輕量級JIT可以解決這些問題,Vladimir Makarov認為,輕量級編譯器應該是MRuby JIT更好的解決方案,也有助於將Ruby的使用範圍,從服務器市場擴展到移動設備和物聯網市場。這個輕量級JIT稱為MIR,概念上是一種明確定義的中介語言。

MIR要成為比GCC或LLVM所提供的JIT接口,還要輕量的JIT編譯器,Vladimir Makarov的目標是,編譯速度和啟動速度要比經優化的GCC還要快100倍,程序代碼也要小100倍,因此實例程序代碼要少於1萬行C程序代碼。MIR的初期目標是先滿足CRuby或MRuby的JIT需求。

MIR具有強類型的特性,用戶可以通過LLVM IR作為使用MIR的途徑,未來Vladimir Makarov希望除了LLVM IR,WebAssembly、Java字節碼、CIL甚至是其他中介語言與中介碼,都可以作為MIR的輸入,最終是要讓MIR可以使用所有流行的機器碼,並也能回傳C、WebAssembly、Java字節碼,Vladimir Makarov提到,MIR目標與LLVM IR目標相似,但是輸入與輸出有許多差異。

MIR是一個龐大的項目,Vladimir Makarov決定以開源的方式進行,有興趣的開發者已經可以在GitHub上關注項目進度,或是加入開發的行列,MIR仍在初期階段,但很快的就會先用在CRuby和MRuby的JIT實例上。


分享到:


相關文章: