開発中の「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」に実験機能として取り込むことが併せて提案されたものの、こちらは投票で否決された。
Copyright © ITmedia, Inc. All Rights Reserved.