Quantcast
Channel: rana_kualuの記事 - Qiita
Viewing all articles
Browse latest Browse all 331

【PHP8.1】PHP8.1はPHP7.4より20%高速化している

$
0
0
MLにAutomatic performance benchmarking: PHP 8.1 is ~30% faster than PHP 7.4という投稿があったので紹介してみます。 https://externals.io/message/116323 kocsismate90 最近PHP用の自動ベンチマークフレームワークを作ってるんだけど、その宣伝に来たよ。 最初はis_literalのRFCの性能評価に使ったんだけど、その後多くの問題を修正して新機能も追加したよ。 昔インテルが行った自動ベンチマークを覚えてる人もいるかもしれない。 私はこのプロジェクトに刺激を受け、そして今同じようなことをやっているけど、さすがに彼らほど高度なことはできなさそう。 今作っているphp-version-benchmarksは、 ・完全自動で定期的に実行してくれる。 ・Dockerでローカル実行可能。クラウド(現在はAWSのみ)でも実行可能。 ・X86-64とARM64に対応。 ・PHP7.4以降に対応 ・OPcache/JIT/preloadingにも対応 ・PHPのソース、および現実的なサイトとしてのサンプルにSymfonyとLaravel入り。 最新のベンチマーク結果はこちらで公開してるよ。 この結果を定期的にMLに投稿するのはどうだろう? come@chilliet.eu MLに自動配信は邪魔なのでやめて。 大きな変更があったときに投稿するとかは歓迎。 Craig Francis デグレを発見できたりするかもしれないのは便利かも。 kocsismate90 ごめん計算間違ってたので修正した。 30%じゃなくて23%とか21.5%くらいだった。 それでも十分な性能向上だからすごいと思う。 測定結果 kocsismate/php-version-benchmarksで見ることができます。 Laravel demo app - 25 consecutive runs, 250 requests (sec) 実用環境、すなわち実環境のLaravelに大量のリクエストを送り付けて結果を見るテストです。 PHP 最小 最大 標準偏差 平均値 平均値差分 中央値 中央値差分 メモリ PHP 7.4 1.33639 1.46424 0.03508 1.36586 0.00% 1.35102 0.00% 33.00 MB PHP 8.0 1.25693 1.39606 0.03539 1.28991 -5.56% 1.27588 -5.56% 32.39 MB PHP 8.1 1.05594 1.06841 0.00409 1.06094 -22.32% 1.05898 -21.62% 35.48 MB PHP 8.1 (JIT) 1.04156 1.08010 0.00697 1.04972 -23.15% 1.04883 -22.37% 43.29 MB PHP 8.1 (preloading) 1.05253 1.14954 0.02023 1.06853 -21.77% 1.06247 -21.36% 35.37 MB PHP7.4から8.0で5%、そして7.4から8.1では2割の高速化と、わりかしえらいことになっています。 単純にPHP8.0からPHP8.1にするだけでも1割以上早くなるというわけで、PHPの最適化はいったいどうなってるんですかね。 しかし、JITをオンにしても影響はほぼありません。 おそらくは処理時間のほとんどがDBやファイルとのI/Oだからでしょう。 CPUの使用時間なんてI/Oに比べたら微々たるものですからね。 bench.php - 15 consecutive runs (sec) こちらはCPUのベンチマークです。 具体的には計算処理を延々繰り返すというよくあるやつです。 PHP 最小 最大 標準偏差 平均値 平均値差分 中央値 中央値差分 メモリ PHP 7.4 0.34132 0.34402 0.00067 0.34197 0.00% 0.34182 0.00% 23.52 MB PHP 8.0 0.33340 0.34220 0.00245 0.33838 -1.05% 0.33817 -1.07% 23.43 MB PHP 8.1 0.34259 0.35276 0.00247 0.34749 1.61% 0.34850 1.95% 23.52 MB PHP 8.1 (JIT) 0.10965 0.11136 0.00044 0.10993 -67.85% 0.10978 -67.88% 25.23 MB PHP 8.1 (preloading) 0.34613 0.35117 0.00180 0.34757 1.64% 0.34623 1.29% 23.53 MB JITやべえ。 露骨にJITの恩恵が出ていますね。 JITのとんでもない高速化が目を引きますが、JIT以外はそんなに早くなっていない、というよりむしろ若干遅くなっていますね。 1-2%程度なのでほぼ気付かない程度ですが。 測定結果からすると、JITはCPUをぶん回す処理に圧倒的に強く、バックエンドでのバッチ処理などに向いています。 Laravelなどの通常アプリでは逆にJITの恩恵がほぼ無く、単純にPHP8.1での全体的な処理能力向上がパフォーマンスに寄与しています。 従って、Web用サーバではJIT無効で運用し、バッチ用バックエンドサーバではJITを有効にする、という戦略が有効でしょう。 まあ大抵は兼用している気がしますが、その場合はとりあえずJIT有効にしておけばいいんじゃないかな。 感想 お前まだ早くなるのか。 PHP7.3でPHP5から3倍速くなったってのに、そこからさらに2割増しってどういうことだよ。 このまま高速化が続けば、そのうちC言語の速度を追い抜いてしまうかもしれませんぞ。

Viewing all articles
Browse latest Browse all 331

Trending Articles