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言語の速度を追い抜いてしまうかもしれませんぞ。
↧