Serveur

Un serveur est entièrement dédié aux benchmarks, il n'héberge aucun site ou aucune autre application.

Système d'exploitation Ubuntu server 16.04 LTS 64 bits
Processeur Intel(R) Xeon(R) CPU D-1531 @ 2.20GHz (6 coeurs, 12 threads)
RAM 32 Go DDR4 ECC Stockage SSD
Apache Bench 2.3 nginx 1.10.3
Extensions PHP 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

Protocole de benchmark

#1 PHP FPM est redémarré, pour vider l'OPCache
#2 Suppression de tous les caches et logs, warmup des caches si besoin
#3 Un benchmark non sauvegardé est lancé, 1 000 appels, concurrence d'accès 1, pour initialiser le cache et l'OPCache
#4 5 benchmarks sont lancés, avec 50 000 appels, pour chaque concurrence d'accès (1, 5, 10 et 20)
#5 Seul le meilleur résultat sera ajouté dans le Score, pour chaque concurrence d'accès

Score

10 000


Le meilleur des 5 benchmarks pour chaque concurrence d'accès modifie le score de l'outil benchmarké.
Plus il est élevé, plus l'outil est capable de répondre rapidement.

Chaque type de benchmark (Hello World, API REST etc) peut avoir un score maximum de 10 000 pour chaque concurrence d'accès (1, 5, 10 et 20).
Ce score est un pour dix mille (% * 1 000) comparé à tous les résultats du même type de benchmark.
Le score total est l'addidtion de tous les scores de tous les types de benchmark et de toutes les concurrences d'accès.

Exemple : Symfony 4.1 a pris 57 510 ms (le plus rapide de tous les frameworks) pour effectuer le benchmark Hello World. Symfony 4.0 a pris 58 382 ms pour le même benchmark.
Symfony 4.1 aura un score de 10 000, et Symfony 4.0 un score de 9 850 : 10 000 / (58 382 / 57 510).

Code source

Pour que tous les outils aient les mêmes chances, l'installation par défaut est effectuée.
Quasiment aucun fichier n'est modifié.
Si il existe, le tutorial d'installation de l'environnement de production sera suivi.

Le code source de tous les benchmarks est disponible sur github.com/phpbenchmarks.
N'hésitez pas à faire une pull request pour améliorer le résultat du benchmark de votre outil préféré !