BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Facebookが開発,運用ともにHHVM/JITを使用開始

Facebookが開発,運用ともにHHVM/JITを使用開始

原文(投稿日:2012/11/30)へのリンク

 

FacebookはJITコンパイル機能を備えたHipHop VMであるHHVMの運用開始を発表した。社内の開発環境と実行環境を統一すると同時に,開発者に対して大幅なパフォーマンス向上を実現するソリューションだ。

Facebookはページロードのパフォーマンス上の必要性からPHP-to-Cツールチェーンの開発に着手し,2010年にHipHop PHPの名称でオープンソース化した。そのコンパイラはHPHPcと呼ばれている。このツールはPHPを抽象構文木(AST/Abstract Syntax Tree)に,その後C++に変換した上で,x64バイナリコードに静的にコンパイルする。この方法はWebページの速度を向上させたが,同時に開発作業にも影響を及ぼした。Facebookの開発者たちは各自でWebサイトのコードツリーの完全なコピーを所持しているので,コードベース全体がコンパイルされるのを待たなければならなくなったのだ。Web サイト規模の急速な拡大に伴って,このコンパイル実行フェーズは10分程度にも達している。開発者にとってこの待ち時間の持つ意味は大きい,と同社でエンジニアリングディレクタを務めるDavid Mortensen氏は,QCon SF 2012でのHPHPcに関する議論で語っていた。

この問題を解決するため,製品コード用にはコンパイラを継続して使用する一方で,コンパイルの無駄時間を排除するために開発用インタプリタ(HPHPi)を作成する,という決断が下された。この結果,稼動環境と開発環境が違うものになり,パフォーマンス上の理由で異なるASTを使用したことがひとつの問題になった。さらにFB技術者のDrew Paroski氏によると,HipHop導入以前に使用していたオリジナルのZendエンジンよりHPHPiが遅いことも明らかになった。

新たに直面したこの問題に対して,Facebook内の小チームがHHVM(HipHop VM)という仮想マシンを考案し,2011年から開発に用いられるようになった。その後,長期にわたるJITチューニングを経て,HHVMは実環境のデプロイコード処理に導入されることになった。Paroski氏の発表によれば,HHVMはHPHPcと同レベルになったのみならず,ホームページのロード時間ではわずかに上回るまでに改善されている。これによってFacebookの開発環境と稼動環境が統一されたと同時に,JITエンジンのチューニングによってさらにパフォーマンスを向上する余地が与えられたことになる,とParoski氏は述べている。

HHVMを導入したことで私たちのPHP開発スタックは,ランタイムから基本ライブラリAPI,さらには生成されたマシンコードそのものに至るまで,以前よりも広い範囲を対象とした最適化戦略を追求できるようになりました。この柔軟性を活用して,今後数年間でFacebookのWeb層をさらに効率化したいと考えています。

私たちは今後もHipHopの開発エクスペリエンスの向上を続けます。それによって私たち自身の開発と導入のワークフローをさらに簡単で柔軟なものにすると同時に,広く利用されているPHPアプリケーションやフレームワークをより広範にサポートできることを,私たちは大変うれしく思っています。

Paroski氏によると,現在のHipHopは部分的にインタープリタ処理もあるが,大部分のコードはJITコンパイルされるという混在環境である。

HHVMはPHPソースをHipHopバイトコード(HHBC)に変換した上で,シームレスな相互運用が可能なバイトコードインタプリタとx64 JITコンパイラの両方を使用して処理する,という方法でPHPプログラムを実行します。可能な部分ではJITを,それ以外はインタープリタを実行エンジンとして使用するのです。

FacebookではHHVMをオープンソースにするとともに,HPHPiを廃止予定として構築サポートの対象外としている。HPHPcのサポートも2013年半ばまでに終了する予定だ。HHVMにはUbuntu 12.04用のビルド済パッケージCentOS 6.3用の手順資料が用意されている。FreeBSD 9とMac OSのサポートは来年,HPHPcの廃止後に提供される予定である。

 

この記事に星をつける

おすすめ度
スタイル

BT