0
0

More than 3 years have passed since last update.

PHP 8.0 を使ってベンチ結果もとってみた

Posted at

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サーバの台数が減ることはコストメリットになりますからね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0