開発中の「PHP 8」にJITコードを取り込む提案がPHPの開発者コミュニティーの投票で可決された。CPUに負荷のかかるワークロードで実行速度が劇的に高まるという。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
オープンソースの汎用(はんよう)プログラミング言語「PHP」の最新版「PHP 8」へ「JIT(Just-In-Time)」コンパイラを導入することが決まった。
JITコードの取り込みについては、RFC(Request for Comments)として提案されており、2019年3月21〜28日に開発者コミュニティーで投票が行われ、50対2で可決された。
これを受け、PHP JITブランチのコードがPHPのマスターブランチにマージされた。発表時点ではPOSIXプラットフォームと、Windowsのx86/x64プラットフォームをサポートしている。
RFCでは、PHP 8にJITを取り込む理由として以下の3つが挙げられていた。
RFCでは、Mandelbrotベンチマークによる以下の関数について実行結果の公開データを参照し、JITによってパフォーマンスが4倍以上向上することを指摘している。
function iterate($x,$y)
{
$cr = $y-0.5;
$ci = $x;
$zr = 0.0;
$zi = 0.0;
$i = 0;
while (true) {
$i++;
$temp = $zr * $zi;
$zr2 = $zr * $zr;
$zi2 = $zi * $zi;
$zr = $zr2 - $zi2 + $cr;
$zi = $temp + $temp + $ci;
if ($zi2 + $zr2 > BAILOUT)
return $i;
if ($i > MAX_ITERATIONS)
return 0;
}
}
JITの導入により、パフォーマンスを測定する「bench.php」の実行時間が、0.320秒から0.140秒へと半分以下に短縮されたことも、RFCでは紹介している。JITは、ほとんどのCPU集約型ワークロードの動作を大幅に高速化すると予想されている。
ただし、現時点では、「WordPress」のようなアプリケーションでは、JITによるパフォーマンス改善があまり期待できないという。このため、プロファイリングや投機的最適化により、こうしたアプリケーションでもJITの効果を高めることを計画している。
RFCによれば、JITのモダンな実装である「PHP JIT」は、JavaScriptの「V8」やPHP互換のHHVM(HipHop Virtual Machine)、Pythonの「PyPy」などと比べて、極めてシンプルだという。その一方で、PHP JITは、PHPの全体的な複雑さを招き、新たなタイプのバグが発生するリスクや、開発および保守コストを増大させるといった課題があるという。
PHP JITの実装は、コードをコンパイルし、共有メモリへ保持しておくOPcacheとはほぼ独立した形となった。PHP JITはコンパイル時と実行時に有効にしたり、無効にしたりできる。PHP JITを有効にすると、PHPファイルのネイティブコードはOPcacheの共有メモリに設けられた追加領域に格納される。JITコードのエントリポイントを指すポインタは「op_array」→「opcodes[].handler」に保持される。
このため、PHP JITには下位互換性の問題はないものの、「xdebug」などのサードパーティーのデバッガや、「XHProf」「Blackfire」「Tideways」といったプロファイラに影響するという。
なお、今回のJIT技術を、同じく開発中の「PHP 7.4」に実験機能として取り込むことが併せて提案されたものの、こちらは投票で否決された。
Ruby 2.6が公開、JITコンパイラを実装
初心者がPHPプログラミングを始めるための基礎知識とXAMPPのインストール
WordPress自体のチューニングが必要な理由と高速化の基本的な考え方Copyright © ITmedia, Inc. All Rights Reserved.