PHP新世代

5月5日に書かれたPHPコミュニティの内部メールへのDmitry Stogovの手紙の少し無料の翻訳。



私のことを知っている人にとって、PHPパフォーマンスの向上がZendでの私の主な責任と情熱であることは秘密ではありません。 一般に、PHP 5.0以降、合成テストでPHPを6回、実際のプロジェクトで約2回加速しています。 PHPとOPCacheのコアの改善を止めませんでした。 それでも、PHP 5.5のリリースでは、大きな進歩を遂げることができず、残りの部分と一緒に、メモリマネージャ、JITテクノロジ、およびその他の潜在的なソリューションの実験を開始しました。



私はJITの実験に多くの時間を費やし、OPCacheに組み込まれたLLVMベースの透過的なJITコンパイラーのプロトタイプを作成しました。 bench.phpの結果は驚くべきものでした(0.219秒に対して2.175-PHP 5.5では10倍の増加)が、実際のプロジェクトでは、パフォーマンスの向上はわずか数パーセントでした。 これにより、実行可能環境の特性と、実際にボトルネックとなっているものを詳しく調べることができました。 仮想マシンがすでに十分に最適化されていることは明らかですが、メモリの割り当てと解放、および値への参照のカウントを常に必要とするデータ構造で動作しました。 通常の実際のPHPアプリケーションは、メモリマネージャーでプロセッサ時間の約20%、ハッシュテーブル操作で10%、PHP組み込み関数で30%、仮想マシンで30%しか消費しません。 もちろん、仮想マシンコードに対してのみJITを試しましたが、ほとんどの場合、このコードはまだ同じメモリ操作を行いました。 したがって、フォーカスを変更し、この大きなボトルネックに取り組むことにしました。 アイデアは、メモリの割り当てを最適化するためにデータ型を変更することでした。 これは非常に難しい決定でした。なぜなら、私たちは大規模なリファクタリングを開始しなければならず、それが何かに影響を与えるかどうかわからなかったからです。



過去4か月間の私たちの仕事の結果をご紹介できることを嬉しく思います。 これはPHPのコアリファクタリングであり、パフォーマンスを大幅に改善し、メモリ使用量を改善します。最も重要なことは、JITを含む将来の主要な改善の基盤を提供することです。 技術的な詳細は見逃します(詳細はwiki.php.net/phpngに公開されています )が、簡単に言えば、建物のほとんどをそのままにしようとすることで基盤を変更しました。 すでに、新しいコアは、テストだけでなく、実際のプロジェクトでもパフォーマンスの10〜30%の向上を実現しています。



いくつかのパフォーマンステスト:

Wordpress 3.6-20.0%のゲイン(253 vs 211 req /秒)

Drupal 6.1-11.7%増加(1770対1585 req /秒

Qdig-15.3%のゲイン(555対482リクエスト/秒)

ZFテストアプリ-30.5%増加(217対166リクエスト/秒)



一部のアプリケーションでは、他のPHP実装よりも優れた結果が得られました。

他の人がアプリケーションをテストし、それらを現在のバージョンのPHPと比較できれば素晴らしいことです。



リファクタリングはまだ完全とはほど遠いものです。肯定的な結果が得られるかどうかを確認することに重点が置かれていたからです。 すべての拡張機能がまだサポートされているわけではなく、一部のテストは失敗し、さらに改善するためのアイデアもたくさんあります。



しかし、私たちは、レビュー、フィードバック、コミュニティのサポートのためにそれを開くのに十分な自信があるようです。 ...すべてのPHP拡張機能をサポートし、カーネルをさらに改良し続けるには、まだやることがたくさんあります。



リファクタリングされたPHPを試して、パフォーマンス、メモリ使用量、および問題に関するフィードバックをお送りください。

* phpng *ブランチはphp.netにあります。 wiki.php.net/phpngにもいくつかの手順があります。 ...



行われた作業の大部分について、シンチェンとニキータに別々に感謝したいと思います!



この新しいカーネルが、私たちが話しているPHPの新しいバージョンをもっと面白くすることを願っています。



みんなありがとう!




私自身のために、昨年のdevconf会議で、DmitryがJITについて尋ねられ、彼が彼とのあまり成功していない経験について話したことに注目したいと思います。 しかし、この手紙はPHPがまだケーキであることを理解させてくれます。



また、言及されたNikita Popov(phpに関する彼の記事の翻訳が繰り返し登場しました)とXinchen Hui(そして彼のプロジェクトもハブで輝いた)は、ほんの数年前にコミュニティに参加した非常に若い人たちです。 このような愛好家は複数のコミュニティをサポートしています。



*翻訳またはタイプミス、文法、スペルのエラーはすべてPMに送信されます。ありがとうございます。



All Articles