2013年夏天,facebook工程師開始對hhvm jit編譯器進行重大的重新設計,這次重新設計使得facebook web伺服器cpu的使用率整體降低了15%。facebook工程師guilherme ottoni最近描述了facebook如何在jit編譯器中利用性能分析引導優化(pgo)技術達到這一效果。
性能分析引導優化技術主要采用運作時分析,例如,識别出更頻繁執行的代碼,以改進代碼的生成。由于編譯器和運作時環境的內建特性,pgo更适合內建到動态編譯器和jit編譯器中。
facebook工程師專注于兩個主要的目标:利用性能分析的資訊優化編譯時作出的決策,以幫助編譯器識别更大的專用類型編譯區域(即可以為給定的已知類型生成的代碼進行優化的區域),進而避免類型檢查的開銷。為了實作這一點,hhvm jit編譯器必須學習如何轉換任意代碼區域,而不僅僅是tracelet,tracelet是非常基礎的可以獨立轉換成機器代碼的專用類型塊。tracelet不會任意增長,因為它的定義是:當無法确定塊的輸入類型或者當jit編譯器不能确定分支的方向時,tracelet就會結束。
facebook工程師概括tracelet采取的第一步是,基于性能分析資訊将其中的幾個組合在一起。通過這樣做,可以減少不同tracelet進入和退出的開銷,并且實作更進階的cross-tracelet優化,例如提升循環不變式計算到循環外。

在基本的tracelet外建構更大的區域具有不違反現有jit優化器和後端中任何假設的優點,這些假設是緊密圍繞這一概念設計的。在第二個階段,facebook工程師開始重新設計這些元件,以便能夠處理具有任意控制流的區域。這一努力在2015年春天完成了,通過将cpu使用率降低15%,顯著提高了jit編譯器的性能,相比第一階段的改進提升了兩倍。