PHP 8.0 の評判が良いようなので、自分の開発環境も PHP 8.0 にバージョンアップしてみました
PHP 8.0 のインストール
具体的な手順はネットにたくさん出てるので省略
$ rpm -qa | grep php
php-pecl-msgpack-2.1.2-1.el7.remi.8.0.x86_64
php-pecl-mongodb-1.9.0-1.el7.remi.8.0.x86_64
php-pecl-memcached-3.1.5-4.el7.remi.8.0.x86_64
php-cli-8.0.3-1.el7.remi.x86_64
php-pecl-apcu-5.1.20-1.el7.remi.8.0.x86_64
php-common-8.0.3-1.el7.remi.x86_64
oniguruma5php-6.9.6-1.el7.remi.x86_64
php-mysqlnd-8.0.3-1.el7.remi.x86_64
php-mbstring-8.0.3-1.el7.remi.x86_64
php-pecl-igbinary-3.2.1-1.el7.remi.8.0.x86_64
php-sodium-8.0.3-1.el7.remi.x86_64
php-8.0.3-1.el7.remi.x86_64
php-opcache-8.0.3-1.el7.remi.x86_64
php-pdo-8.0.3-1.el7.remi.x86_64
php-process-8.0.3-1.el7.remi.x86_64
PHP 設定関連
JIT関連の設定を行った。
/etc/php.d/10-opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.jit=on
opcache.jit_buffer_size=100M
JIT ベンチ
JIT の有無でベンチ結果
単純にループするだけのスクリプトで比較してみました。
sample.php
<?php
$start_time = microtime(true);
$count = 0;
for ($i=0; $i<1000; $i++) {
for ($k=0; $k<1000; $k++) {
$count += 1;
}
}
$end_time = microtime(true);
echo "Exec time: " . ($end_time - $start_time) * 1000 . " ms" . PHP_EOL;
opcache.jit=off 実行結果
$ time php sample.php
Exec time: 860.44096946716 ms
real 0m0.907s
user 0m0.883s
sys 0m0.022s
opcache.jit=on 実行結果
$ time php sample.php
Exec time: 291.85199737549 ms
real 0m0.336s
user 0m0.312s
sys 0m0.023
ベンチ結果考察
JITをonにするだけで3倍弱高速化してます。
JITを有効にするだけでここまで高速化するのは驚きです。
高速化は処理時間が短くなるだけでなく、CPUの使用時間も短くなってます。
timeコマンドだとphpの起動時間も入ってますが、それでもCPU使用時間が短くなることが確認出来ました。
ただしJITで高速化されるのは PHP の実行時のみ。実際のWebだとここまでの高速化はされません。
それじゃあまり意味がないようにも思えますが、高速化されることは正義ですw
特に今時のクラウドでWebサーバをオートスケールしている場合は、高速化よりも軽くなるメリットの方が大きいかも。
レスポンスタイムの改善は少なくても、Webサーバの台数が減ることはコストメリットになりますからね。