ソーシャルネットワーキング大手のFacebookは、ウェブプログラミング言語PHPの高速化に向けて新たな一歩を踏み出しました。同社はPHP仮想マシンを開発し、大規模システムでPHPをネイティブに実行するよりも最大9倍高速にPHPを実行できるとしています。
「私たちの目標は、PHPを本当に高速に動作させることです」と、Facebookのエンジニアリングマネージャー、ジョエル・ポバー氏は述べた。Facebookは今年初めから、HipHop Virtual Machine(HHVM)と呼ばれる仮想マシンを全サーバーで運用している。
Pobar 氏は、今週オレゴン州ポートランドで開催されている O'Reilly Open Source Conference (OSCON) で仮想マシンについて説明しました。
HHVMは、FacebookがPHPを高速化するためにカスタマイズする初めての試みではありません。PHPはインタプリタ言語であり、ソースコードがプロセッサによって直接実行されます。一般的に、PHPのようなインタプリタ言語で書かれたプログラムは、CやC++のように事前に機械語のバイトコードにコンパイルされた言語ほど高速に実行されない傾向があります。FacebookがPHPに忠実であり続けているのは、同社で働く多くのWebプログラマーがPHPを広く理解しているからです。
しかし、飽くことのないユーザーの要求に応えるために、Facebook は当初、PHP コードを C++ に変換し、事前にコンパイルしてパフォーマンスを高速化できる HipHop と呼ばれるコンパイラを考案しました。
FacebookはHipHopの最初のバージョンで数年間、大幅なパフォーマンス向上を享受していましたが、約10億人のユーザーに向けて動的に生成されるウェブページの配信速度を向上させるための他の方法を模索していました。「そのためのパフォーマンス戦略は限界に達していました」とポバー氏は認めています。

HHVMはFacebookにとっての次のステップです。約3年間の開発期間を経て、HHVMはJava仮想マシン(JVM)と同じ原理で動作します。HHVMはジャストインタイム(JIT)コンパイラを搭載しており、人間が読めるソースコードを必要に応じて機械が読めるバイトコードに変換します。(以前のHipHopはHPHPcに改名され、現在はFacebook内で廃止されています。)
このJITアプローチにより、仮想マシンは「実行時によりスマートな判断を下す」ことができるとポバー氏は述べた。例えば、MySQLデータベースにデータ行の読み取り呼び出しが行われた場合、HHVMはそのデータが整数や文字列などどのような型であるかを即座に判断できる。そして、その特定の型を処理するのに最適なコードを即座に生成または呼び出すことができる。
旧HipHopでは、「Facebookのコードベース全体を分析し、推論を行い、その推論に基づいてコードを特化するのが精一杯でした。しかし、すべての推論を正しく行うことはできません。コードベースの中には、単純に推論したり推論したりできない部分があるのです」とポバー氏は述べた。
仮想システムの高速化
Pobar 氏は、HHVM は HPHPc より約 2 倍高速であり、PHP をそのまま実行するより約 9 倍高速であると推定しました。
Facebook は、他の人も PHP ウェブサイトの高速化に HHVM を使用することを期待して、GitHub に HHVM のコードを掲載しました。
HHVMは、非常に大規模で頻繁に使用されるPHPコードベースの処理に最適化されています。Pobar氏は、WordPressブログをホストするような標準サイズのウェブサイトにHHVMを使用した場合、パフォーマンスの向上は5倍程度にとどまると見積もっています。
「PHPをHipHopで実行した場合、CPU実行時間がパフォーマンスを制限する要因にならない可能性があります。システムがデータベースとの通信に時間がかかりすぎているか、memcacheキャッシュ層との通信に時間がかかりすぎている可能性が高いのです」とPobar氏は述べた。