Facebookが公開したPHP仮想マシン「HipHop VM」とは

杉山貴章(オングス)
2011-12-20 12:34:00
  • このエントリーをはてなブックマークに追加

HipHop VMの仕組みと効果

 hphpcの場合は、PHPコードから抽象構文木(AST:Abstract Syntax Tree)を構築し、それをもとにC++コードを生成する。そして、それをさらにg++でコンパイルしてバイナリコードを生成する仕組みになっている。hphpiでもASTを構築するが、これはhphptによるASTとは異なるものになっているとのこと。

 hhvmでは、PHPコードからASTを構築した上で、それをもとにしてHipHopバイトコード(HHBC)と呼ばれる中間コードを生成する。ASTの構築部分にはhphpcの実装を利用しているという。hhvmはHHBCを実行するインタプリタマシンとして動作する。その際に、高速化のためにJITコンパイルの技術を活用している。

 hhvmではトレース型のJITコンパイル手法が採用されている。これはインタプリタによるコード実行中に頻繁に利用される処理を記録し、その部分をネイティブコードにコンパイルすることで高速化を施すというもの。Mozilla Foundationが開発したJavaScriptのJITコンパイラ「TraceMoneky」などで採用されているのと同様の仕組みである。ただしhhvmの場合は対象とするトレースを単純な形に限定することによって、トレースキャッシュの管理を簡素化しているとのことだ。

 現在のhhvmでは、hphpiと比べて1.6倍の高速化を実現できているという。一方でhphpcで生成されたバイナリコードの実行速度と比較するとまだ0.6倍程度にとどまる。もっとも、この性能差は動的トランスレーターの安定性が高まることによって、数カ月以内に改善されるとFacebookの開発者は見積もっている。最終的にはhphpcのバイナリコードと同等以上の実行速度を実現できる見込みとのことだ。

 Facebook社内ではすでにhphpiに代わってhhvmが使われはじめており、将来的にはすべてのPHP実行環境をhhvmに置き換える計画だという。hhvmは従来のHipHop for PHPと同様にオープンソースで開発されており、GitHubにリポジトリが公開されている。PHPの言語仕様そのものは変更されていないので、既存のPHPコードでも実行環境を置き換えるだけで利用することができる。PHPを使ったアプリケーションの高速化を求める開発者にとっては注目すべき取り組みと言えるだろう。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]