PHP Benchmark
の続き。
benchmarkに使うscriptは公式が出しているものを使っていきます。
実行環境
Raspberry Pi4 ModelB
CPU: 4core Arm Cortex-A72 ARMv8 64bit
RAM: 4GB
JIT機能は有効にしてないです。PHP8でもデフォルトで無効化なのでまずは基本の状態で見ていきます。
phpbrewについては↓のREADMEを参照するのが一番よいです。
PHP8.0.11
PHP 8.0.11 (cli) (built: Oct 17 2021 21:12:34) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.11, Copyright (c) Zend Technologies $ php Zend/bench.php simple 0.034 simplecall 0.012 simpleucall 0.050 simpleudcall 0.051 mandel 0.250 mandel2 0.272 ackermann(7) 0.058 ary(50000) 0.016 ary2(50000) 0.013 ary3(2000) 0.103 fibo(30) 0.189 hash1(50000) 0.022 hash2(500) 0.027 heapsort(20000) 0.059 matrix(20) 0.059 nestedloop(12) 0.071 sieve(30) 0.039 strcat(200000) 0.011 ------------------------ Total 1.337
PHP 7.4.25
$ php -v PHP 7.4.25 (cli) (built: Oct 26 2021 20:39:21) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies $ php Zend/bench.php simple 0.088 simplecall 0.018 simpleucall 0.056 simpleudcall 0.060 mandel 0.253 mandel2 0.294 ackermann(7) 0.062 ary(50000) 0.016 ary2(50000) 0.013 ary3(2000) 0.116 fibo(30) 0.194 hash1(50000) 0.025 hash2(500) 0.025 heapsort(20000) 0.064 matrix(20) 0.064 nestedloop(12) 0.125 sieve(30) 0.042 strcat(200000) 0.012 ------------------------ Total 1.526
PHP 7.3.31
$ php -v PHP 7.3.31 (cli) (built: Oct 26 2021 21:25:58) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies $ php Zend/bench.php simple 0.103 simplecall 0.033 simpleucall 0.083 simpleudcall 0.098 mandel 0.507 mandel2 0.398 ackermann(7) 0.103 ary(50000) 0.018 ary2(50000) 0.014 ary3(2000) 0.162 fibo(30) 0.388 hash1(50000) 0.030 hash2(500) 0.030 heapsort(20000) 0.098 matrix(20) 0.104 nestedloop(12) 0.185 sieve(30) 0.055 strcat(200000) 0.014 ------------------------ Total 2.424
PHP 7.2.24
$ php -v PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies PHP Fatal error: Uncaught Error: Call to undefined function hrtime() in /home/dev/ssd/git/php-src/Zend/bench.php:350 Stack trace: #0 /home/dev/ssd/git/php-src/Zend/bench.php(357): gethrtime() #1 /home/dev/ssd/git/php-src/Zend/bench.php(384): start_test() #2 {main} thrown in /home/dev/ssd/git/php-src/Zend/bench.php on line 350
https://www.php.net/manual/ja/function.hrtime.php
hrtime()関数って標準であったよな・・・?と思ったらphp7.3から導入してました。
そりゃだめですよね。
5.6系を入れてみる。
エラーが出てだめでした。理由はopensslのバージョン問題です。
phpbrewの issuesも見てみましたが、サポートする気はないようです。
そもそもEOLを2018年に迎えているので当たり前ですね。
opensslのバージョン下げて無理やりいれようとか思いましたがクレイジーすぎると思ってすぐやめました。
やるとしてもソースからインストールですね。どこかでこけそうな予感してますが。
$ phpbrew known --old $ phpbrew install 5.6 ===> Loading and resolving variants... Checking distribution checksum... PHP Fatal error: Uncaught Error: Call to undefined function PhpBrew\Tasks\hash_file() in phar:///usr/local/bin/phpbrew/src/PhpBrew/Tasks/DownloadTask.php:28 Stack trace: #0 phar:///usr/local/bin/phpbrew/src/PhpBrew/Command/InstallCommand.php(384): PhpBrew\Tasks\DownloadTask->download('https://www.php...', '/root/.phpbrew/...', 'sha256', 'ffd025d34623553...') #1 [internal function]: PhpBrew\Command\InstallCommand->execute('5.6.40') #2 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/CommandBase.php(846): call_user_func_array(Array, Array) #3 phar:///usr/local/bin/phpbrew/vendor/corneltek/cliframework/src/Application.php(398): CLIFramework\CommandBase->executeWrapper(Array) #4 phar:///usr/local/bin/phpbrew/src/PhpBrew/Console.php(105): CLIFramework\Application->run(Array) #5 phar:///usr/local/bin/phpbrew/bin/phpbrew(26): PhpBrew\Console->runWithTry(Array) #6 /usr/local/bin/phpbrew(12): require('phar:///usr/loc...') #7 {main} thrown in phar:///usr/local/bin/phpbrew/src/PhpBrew/Tasks/DownloadTask.php on line 28