Server

A server is 100% dedicated to benchmark, no web sites or application run on it.

Organization system Ubuntu server 16.04 LTS 64 bits
Processor Intel(R) Xeon(R) CPU D-1531 @ 2.20GHz (6 coeurs, 12 threads)
RAM 32 Go DDR4 ECC Storage SSD
Apache Bench 2.3 nginx 1.10.3
PHP extensions calendar, ctype, dom, exif, fileinfo, ftp, gettext, iconv, intl, json, mbstring, mysqli, mysqlnd, opcache, pdo, pdo_mysql, phar, posix, readline, shmop, simplexml, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xml, xmlreader, xmlwrite, xsl, zip

Benchmark protocol

#1 PHP FPM is restarted, to clear OPCache
#2 Clear all caches and logs, warmup caches if needed
#3 First unsaved benchmark is launched, 1,000 calls, concurrency 1, to init caches and fill OPCache
#4 5 benchmarks are launched, 50,000 calls, for each concurrencies (1, 5, 10 and 20)
#5 Only best results are added to Score, for each concurrencies

Score

10,000


Best of 5 benchmarks update benchmarked tool score.
The higher it is, the more the tool is able to respond quickly.

Each benchmark type (Hello World, REST API etc) could have a maximum score of 10,000 for each concurrency (1, 5, 10 and 20).
This score is a for a thousand (% * 1,000) compared to all results, from same benchmark type.
Total score is the addition of all scores from all benchmarks types and all concurrencies.

Example : Symfony 4.1 took 57,510 ms (faster of all frameworks) to finish Hello World benchmark. Symfony 4.0 took 58,382 ms for same benchmark.
Symfony 4.1 will have a score of 10,000, and Symfony 4.0 a score of 9,850: 10,000 / (58,382 / 57,510).

Source code

To have equals chances for each tools, default installation is done.
Nearly no files are modified.
If exist, production environment tutoial will be followed.

All benchmarks source codes are available on github.com/phpbenchmarks.
Do not hesitate to create a pull request to improve your favorite tool result!