BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース FacebookはいかにしてHHVM JITコンパイラのパフォーマンスを改善したか

FacebookはいかにしてHHVM JITコンパイラのパフォーマンスを改善したか

原文(投稿日:2016/10/06)へのリンク

2013年の夏,Facebookの技術者達は,HHVMJITコンパイラの再設計を開始した。 目標は,FacebookのWebサーバ上でのCPU使用率を15%低下させることである。 Facebookの技術者であるGuilherme Ottoni氏は,Profile-guided optimizations(PGO)をJITコンパイラに適用することにより,目標を達成したと記している

Profile-guided optimizationとは,実行時プロファイルを使用する技術である。 特定のコード片が他のコードより頻繁に実行されている,といった情報を利用しコード生成を改善する。 PGOは特に,動的な統合や,コンパイラと実行環境が統合されているJITコンパイラに適している。

Facebookの技術者達は,2つのゴールに注力した。 コンパイル時に行われる判断を最適化するためにプロファイル情報を利用すること。 そしてコンパイラが,型特有のコンパイル領域をより大きく認識できるように支援することである。 例えば,生成されたコードは,与えられた型によって最適化される。 これにより,型チェックのコストが減少する。 これを可能にするためには,HHVM JITコンパイラが(単なるトレースレット(tracelets)ではなく)任意のコード領域をどのように変換するかを学習する必要があった。 トレースレットは,型特有のブロックとしては基本的であり,各々独立してマシンコードに変換される。 トレースレットは自由に拡張することはできない。 定義により,トレースレットはブロックに対する入力型が決定できなくなるか, JITコンパイラが分岐の方向を決定できなくなったところが終端である。

トレースレットを一般化するためにFacebook技術者が最初にとった行動は, プロファイル情報に基づいて,いくつかのトレースレットをまとめてアセンブルすることだった。 これを行うことにより,別々のトレースレットの入退出のオーバーヘッドを減少させることができた。加えて,さらに発展的なトレースレット横断型の最適化を行った。 例えば,ループ不変状態をループの外に移動することなどである。

基本的なトレースレットより広い領域を構築することは, 既存のJITコンパイラや基盤の限界を突破すること以上の成果を挙げた。 しかし,第2フェーズにおいて,Facebook技術者はこれらのコンポーネントの再設計を開始した。 任意の制御フローをもつ領域を扱うためである。 この結果,2015年春にはJITコンパイル性能は飛躍的に向上し, CPU使用率を15%低下させることができた。 これは第1フェーズにて得られた成果を上回る。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT