2013年夏天,F(xiàn)acebook工程師開始對HHVM JIT編譯器進(jìn)行重大的重新設(shè)計(jì),這次重新設(shè)計(jì)使得Facebook Web服務(wù)器CPU的使用率整體降低了15%。Facebook工程師Guilherme Ottoni最近描述了Facebook如何在JIT編譯器中利用性能分析引導(dǎo)優(yōu)化(PGO)技術(shù)達(dá)到這一效果。
性能分析引導(dǎo)優(yōu)化技術(shù)主要采用運(yùn)行時分析,例如,識別出更頻繁執(zhí)行的代碼,以改進(jìn)代碼的生成。由于編譯器和運(yùn)行時環(huán)境的集成特性,PGO更適合集成到動態(tài)編譯器和JIT編譯器中。
Facebook工程師概括tracelet采取的第一步是,基于性能分析信息將其中的幾個組合在一起。通過這樣做,可以減少不同tracelet進(jìn)入和退出的開銷,并且實(shí)現(xiàn)更高級的cross-tracelet優(yōu)化,例如提升循環(huán)不變式計(jì)算到循環(huán)外。
在基本的tracelet外構(gòu)建更大的區(qū)域具有不違反現(xiàn)有JIT優(yōu)化器和后端中任何假設(shè)的優(yōu)點(diǎn),這些假設(shè)是緊密圍繞這一概念設(shè)計(jì)的。在第二個階段,F(xiàn)acebook工程師開始重新設(shè)計(jì)這些組件,以便能夠處理具有任意控制流的區(qū)域。這一努力在2015年春天完成了,通過將CPU使用率降低15%,顯著提高了JIT編譯器的性能,相比第一階段的改進(jìn)提升了兩倍。
查看英文原文:How Facebook Redesigned the HHVM JIT Compiler for Performance