vlambda博客
学习文章列表

红帽工程师开发可用于物联网装置的轻量级JIT编译器MIR




红帽的软件开发工程师Vladimir Makarov在开发者博客提到,他现在正开发一个轻量级JIT编译器(MIR,Medium Internal Representation),编译速度与启动速度将比GCC或LLVM快100倍,作为现有MJIT编译器的补充,或是在现有JIT编译器无法作用时,成为替代方案。


Vladimir Makarov提到,过去社群花费了大量的时间,对GCC和LLVM进行最佳化,除了改善可靠度,同时也建立了许多工作基础,因此其他人可以使用这些成果,快速地以GCC或LLVM介面来实作JIT,他们也以这些现有的编译器,开发了CRuby JIT。


不过,这其中存在了许多缺点,其中一大缺点,便是以GCC或LLVM作为基础的JIT程式通常很大,CRuby 2.6本身超过150万行程式码,而庞大的程式码量对于云端、物联网和行动装置上的应用,目前仍是很大的问题。


而且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实作上。