mutao.net

いわゆる雑記。

PHP Benchmark

mutaonet.hatenablog.com

の続き。

benchmarkに使うscriptは公式が出しているものを使っていきます。

github.com

実行環境

Raspberry Pi4 ModelB

CPU: 4core Arm Cortex-A72 ARMv8 64bit

RAM: 4GB

JIT機能は有効にしてないです。PHP8でもデフォルトで無効化なのでまずは基本の状態で見ていきます。

phpbrewについては↓のREADMEを参照するのが一番よいです。

github.com

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