The next generation of PHP 
PHPNGの動向hnw 
PHPカンファレンス2014 
(2014/10/11)発表資料
自己紹介 
❖ @hnw! 
❖ 勤務先:KLab株式会社! 
❖ カレーとバグが大好物! 
❖ 好きなdouble値:NaN
はじめに 
❖ 最近PHP界隈では性能関連の話題がホットですね! 
❖ HHVM/Hack, Zephir, HippyVM! 
❖ PHP本体でも性能改善プロジェクトが動いています! 
❖ 本日の話題:PHPNG
PHP7が来るぞー 
❖ PHPの次のメジャーバージョンは7! 
❖ PHP6はスキップ! 
❖ 現在masterブランチ上でPHP7の開発が進んでいる
PHP7が来るぞー 
❖ PHPの次のメジャーバージョンは7! 
❖ PHP6はスキップ! 
❖ 現在masterブランチ上でPHP7の開発が進んでいる! 
❖ PHP7の前に5.7リリースを挟む提案に反対多数! 
❖ 1年に1回リリースするペースは維持したい意向! 
❖ つまり来年の今頃PHP7リリースが目標
PHP7の目指すところ 
❖ PHP7に取り込まれる目玉機能! 
❖ PHPNG(PHP変数に対応するデータ構造の変更)! 
❖ PHPコンパイル時にAST(抽象構文木)を導入! 
❖ Memory Managerの書き直し、高速化! 
❖ Zend Engine自体のリファクタリングが主目的
PHPNGとは 
❖ Dmitryによるphp-internal MLへの投稿(2014/05)! 
❖ OPCacheにJITコンパイラを入れたが、性能改善しなかった! 
❖ 実際のPHPアプリケーションを測定した! 
❖ メモリアロケーション/ハッシュ操作30%! 
❖ 内部関数実行30%! 
❖ VM実行30%
PHPNGとは 
❖ Dmitryによるphp-internal MLへの投稿(2014/05)! 
❖ OPCacheにJITコンパイラを入れたが、性能改善しなかった! 
❖ 実際のPHPアプリケーションを測定した! 
❖ メモリアロケーション/ハッシュ操作30%! 
❖ 内部関数実行30%! 
❖ VM実行30% 
ここ速くすべきじゃね?
PHPNGとは 
❖ Cの実装としてPHP変数の持ち回し方法を変えた! 
❖ 多くのスカラ型について、即値をコピー渡しする! 
❖ boolean, integer, floatなど! 
❖ コピーオンライト・参照カウンタの増減も無し! 
❖ メモリのコピーや動的確保が減って速くなった! 
❖ JITコンパイルは無し
PHPNGとは 
❖ Cの実装としてPHP変数の持ち回し方法を変えた! 
❖ 多くのスカラ型について、即値をコピー渡しする! 
❖ boolean, integer, floatなど! 
❖ コピーオンライト・参照カウンタの増減も無し! 
❖ メモリのコピーや動的確保が減って速くなった! 
❖ JITコンパイルは無し 
zval大改造!
PHPNGの性能 
❖ ZeevのPHPNG性能調査の記事(2014/07)から引用
PHPNGの性能 
❖ PHP5.6.0(OPCacheあり)に対して1.5-2.1倍! 
❖ HHVMとほぼ互角
PHPNGの課題:extension対応 
❖ PHP extensionが全部作り直しになる! 
❖ 内部的な変数の持ち方を変更したので仕方がない! 
❖ 3rd-party extensionの対応が普及のカギ! 
❖ xdebug, APCu, memcached あたりが未対応! 
❖ PHP5用とPHP7用を1ソースで扱えるのかも疑問…
PHPNGの現状 
❖ PHP同梱のextensionの大半がPHPNG対応済! 
❖ PDO, OPCache, curl, etc..! 
❖ Known Problemsによれば、passしてないテストは残り5! 
❖ 手元でテストしたらpass: 11317/fail: 34
まとめ 
❖ 次のPHPはPHP7、1年後のリリースを目指す模様! 
❖ ユーザー目線では何もせずに2倍近く速くなるかも! 
❖ extension作者は涙目! 
❖ 来年のPHPカンファレンスが楽しみですね
ご静聴 
ありがとう 
ございました

PHPNGの動向