7

samedi 28 novembre 2015

[PHP] Benchmark a base de XDebug et graphiques by kcachegrind

Des bench, des bench, oui mais des bench xdbug !


Alors on trouve des Bench php partout sur le net, mais de deux choses l'une (ou plus):
- Ils ne sont pas actualisé
- La version php et les infos serveurs ne sont pas indiqué
- Chaque bench en contredis d'autres
- Ils utilisent time() et microtime()(plus rarement), n'utilisent pas les fonctions de math ... et presque jamais $_SERVER['REQUEST_TIME']
- Le temps d’exécution est en variation constante, il est donc logique de faire des résultats relatif (%)

Débutons donc avec ces bench qui sont peut être complétement débiles, mais tester par soi même avec des approches différentes c'est sympa :)

Toutes les sources et images sont dispo ici : https://git.iglou.eu/adrien/benchmark_php/tree/master

Méthode :
J'ai volontairement fais des scripts simples avec beaucoup de répétitions, j'ai tenté d'équilibrer le plus possible entre les entités à tester.
Pour tester les entités avec XDB et KCG, chaque entités est dans une fonction.
Les loop sont de 100.000 et ils sont externe à la fonction de l'entité testé, afin de ne pas la prendre en compte dans le résultat.
On obtiens la moyenne par fonction "TempsPour100.000/100.000" tout simplement ... TP100k étant le résultat de la définissions de main par les fonctions

Infos serveur :
- Serveur virtuel utilisé uniquement en teste
- 8Go ram
- 4core 3Ghz

Infos logiciel :
- Archlinux kernel 4.2.4
- Apache 2.4.17-2
- XDebug 2.3.3-1
- Php 5.6.14-1

Infos php :
- Cache désactivé
- GC activé
- Xdebug seulement le profileur est activé

Résultats :

Parcourir un tableau,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_arrayLoop.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_arrayLoop.php

k = key; v = value; Pv = pointer to value;
Opérateurs de comparaison (égal et n'est pas égal),
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_comparisonOperators.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_comparisonOperators.php


Définir un array,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_deffineArray.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_deffineArray.php


Utilisation de echo,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_echo.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_echo.php


Utilisation de echo pour plusieurs variables (concat),
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_echo_multiVar.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_echo_multiVar.php


Définir des variables globales,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_globalVariables.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_globalVariables.php


Is array ?
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_isArray.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_isArray.php


Afficher une chaine,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_outputAString.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_outputAString.php


Concaténation d'un chaine,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_stringConcat%C3%A9nation.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_stringConcatenation.php


If ou Switch ?
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_switch.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_switch.php


Unset me,
img : inuit.iglou.eu/adrien/benchmark_php/raw/master/php_unset.png
source : https://git.iglou.eu/adrien/benchmark_php/blob/master/php_unset.php


Pour ce qui est des licences vu que quand ont partage un truc c'est obligatoire si non vous ne pourrez pas réutiliser quoi que ce soit...
Je conserve la paternité, c'est obligatoire en france.

Donc pour le code :
/*
* Copyright 2015 Kara adrien
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

Pour les images :
Attribution (BY): Le titulaire des droits autorise toute exploitation de l’œuvre, y compris à des fins commerciales, ainsi que la création d’œuvres dérivées, dont la distribution est également autorisé sans restriction, à condition de l’attribuer à son l’auteur en citant son nom. Cette licence est recommandée pour la diffusion et l’utilisation maximale des œuvres.

Comme toujours si vous relevez des erreurs, merci de m'en faire part ça compte dans mes remises en question quotidiennes =D

Si je fais d'autres bench ils seront ajouté ici, peut probable de pondre un autre sujet pour ça. Sauf si les prochains bench sont sous PHP7.



éa, les amis.

Aucun commentaire:

Enregistrer un commentaire