hnwの日記

PHPカンファレンス関西2015でPHP7について発表してきました

去る5/30にPHPカンファレンス関西2015で基調講演をさせていただきました。今回は長い枠だったのもあって資料準備にかなりの時間をかけました。その甲斐あってか、好評だったようで何よりです。発表資料は以下になります。


質疑応答やその他の反応について補足

お伝えし忘れたことや誤解を招いた点があったかもしれませんので、4点ほど補足します。

「内部構造を変更したのだから、エクステンションごとにPHP7対応が必要なのではないか?」

その通りです。プレゼンでも紹介したzvalのポインタ参照が一段浅くなっていることや、内部APIが変更された影響があるため、PHP5用のエクステンションをPHP7でビルドしようとしても、そもそもコンパイルすら通らない可能性が高いです。xdebugなど内部構造と密接に関わるエクステンションほど対応に時間がかかるでしょう。


一方で、PHP本体に同梱のエクステンションは既にほぼ動作しています。まだ不穏なエクステンションも残っている気がしますが、beta1が出る頃には落ち着いてくれると期待しています。


また、外部でメンテされているものについても、mamcachedなど有名どころのエクステンションには随分前からPull Requestが出ていたりもします。PHP7リリースまでにはおおむね何とかなっているのではないでしょうか。


ちなみに、各エクステンションの対応状況をまとめているプロジェクトも存在します。


まだまだ空欄が目立つ状況ですが、少なくともPHP同梱のエクステンションについては対応が進んでいることが見て取れるかと思います。

「構文解釈が1フェーズ増えたということだが、構文解釈自体が遅くなったのか?」


構文解釈の処理だけ取り出すと遅くなっている可能性はあると思います。しかし、エンジン全体の改善に比べると十分無視できる程度の変化だと思いますし、万一遅いとしてもOPcacheでopcodeキャッシュすればその影響は実質ゼロになりますから、速度面での懸念はないと考えていいでしょう。

「PHP7のデータ構造は64bit環境に合わせたということだが、32bit環境で遅くなったりしないのか」

PHP7でのデータ構造変更では、32bit/64bitどちらの環境でもPHP5のときのような変な隙間ができたりしないよう考えられています。また、高速化チームによるベンチマークテストは32bit/64bit両方で行われており、どちらもほぼ同レベルの高速化を達成しています。

mysqlエクステンションなくなると痛い」

mysqlエクステンションは本体に同梱されなくなっただけで、エクステンション自体は残るはずです。既にエクステンションのPHP7対応は終わっているので、どうしてもという場合は自前ビルドすれば各関数が動作するようになります。とはいえ、今後メンテが続くかどうかも未知数ですから、可能なら使わないようにPHPソースコードを書き換えるべきでしょう。

追加される機能について補足

PHP7で追加・変更される機能はかなり多いので、限られた時間では紹介しきれませんでした。直前のエントリ「PHP7で変わること」では多くの変更点を紹介しましたが、その中であと5分あれば紹介したかった機能を紹介します。

速度改善について補足

「もっと新機能の話が聞きたかった」という方もいらっしゃったと思いますが、当初のプレゼン資料では今より内部構造のマニアックな話を盛り込んでいました。時間的に厳しかったので削ってしまいましたが、本当はこんなことが話したかった!ということを箇条書きにしておきます。

  • zvalのポインタ参照が1段浅くなった影響
    • (メモリ消費量が減ったことはプレゼンで伝えられた)
    • ヒープの確保・開放の回数が減ったことの方が性能面での影響は大きいのでは?
  • 配列のデータ構造中からリンクトリスト2組が無くなり、整数インデックスの配列が作られた
    • ポインタ(64bit)を整数(32bit)に変更するアイデア
    • サイズの面でも局所参照性の面でもキャッシュに優しい
  • その他多くのデータ構造で、同時に使うデータをメモリ上で近い位置に配置するようになっている
    • 局所参照性を高める変更、キャッシュに優しい


このあたりも機会があれば発表したいものです。


僕としては「パフォーマンスチューニングって面白いよね」ということが少しでも伝わればいいなと考えていました。この機会に内部構造に興味を持つような人が増えてくれるといいと思っています。パフォーマンスチューニングって色々な知見が詰まっているので、今回のPHP7はとても良い教材だと思うんですよね。

さいごに

僕はこれほど遠くのカンファレンスに参加するのは初めてでした。また、基調講演ということで45分の枠を頂きましたが、これほど長い発表も初めてのことでした。今回このような機会をいただき、新しい経験をさせてもらったことにまずは感謝いたします。


また、発表者の方々からも刺激をもらいました。4トラック並列だったので見られなかったセッションも多かったのですが、いずれ動画も公開されるはずですから楽しみに待つことにします。いままでアイコンしか知らなかった方々や、お久しぶりの方々とお会いできたのも良かったです。


そして何より運営スタッフの皆様、本当にお疲れさまでした。とても楽しいイベントでした。来年も期待してます!