BT

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

| 作者: Sergio De Simone フォローする 17 人のフォロワー , 翻訳者 小林 健一 フォローする 0 人のフォロワー 投稿日 2016年10月27日. 推定読書時間: 2 分 |

原文(投稿日: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
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT