Apprendre-PHP.com - apprendre à programmer avec le langage PHP

Static and Dynamic Analysis at Ning

09/12/2008 de 10:00 à 11:00 - amphi

Ning's "Your Own Social Network" application is 160,000 lines of PHP that powers hundreds of thousands social networks, each different than the others. To keep our platform humming along smoothly, as well as to keep our internal development processes sane, we need to know what all that PHP code is doing and how it's structured. Documentation is nice (and essential) but there's no substitute for relying on the code itself as the canonical source for information about, well, the code. That's where static and dynamic analysis come in.

Static analysis is scanning, parsing, munching, and otherwise processing our PHP source code to answer whatever questions we have about it. Who calls this function? What parts of the code do disk write operations? Are there any untranslated strings in our localization message catalogs? Dynamic analysis gathers information from running code.

How many times is a function called? How long does it take? When does our PHP code access the filesystem? This talk discusses the static and dynamic analysis techniques that we use at Ning to understand and optimize our platform, including the PHP tokenizer, regular expressions, the vld and xdebug extensions, and the PHP DTrace provider.

(Copié du site de l'AFUP)

 

David Sklar (Ning)

David Sklar is a Software Architect at Ning, Inc., and the author of PHP Cookbook (O'Reilly), Learning PHP 5 (O'Reilly), and Essential PHP Tools (Apress). He speaks regularly at many conferences, including the O'Reilly Open Source Convention, the O'Reilly Emerging Technology Conference, USENIX, and various PHP conferences.

He keeps a blog at http://www.sklar.com/blog/ and maintaings the PX (http://px.sklar.com/), a PHP code exchange he created in 1996. David has a degree in Computer Science from Yale University and lives in New York City, where he enjoys riding the subway, eating salt-baked scallops, and admiring the 18th- and 19th-century American furniture at the Metropolitan Museum of Art.

Site Internet : http://www.sklar.com/blog/
 
 

Actualités de cette session

Posté par Hugo Hamon, le 09/12 à 11:00

Fin de cette session fort intéressante. Les slides de la présentation sont disponibles sur son site Internet : http://www.sklar.com/blog

Question 1 : avant de vous intéresser aux performances purement serveur, commencez-vous par vous intéresser aux performances côté client ?

Réponse : oui on s'y intéresse mais faire en plus de l'analyse statique et dynamique permet de garder un oeil sur les performances internes du code et sur sa qualité.

Posté par Hugo Hamon, le 09/12 à 10:50

Technique 4 d'analyse dynamique : DTrace

DTrace est une combinaison de tous les outils d'analyse dynamique précédent (profiling, truss...). La DTrace va permettre de déterminer comment est exécuté un programme PHP du Zend Engine, en passant par le niveau C, les lectures et écritures en mémoire, les envois sur la sortie standard...

Wez Furlong a écrit une librairie PECL qui permet de faciliter l'utilisation des DTrace.

http://pecl.php.net/package/DTrace

David nous présente la DTrace de l'exécution de la ligne PHP suivante :

<?php $a = 2 + 3; ?>

Le résultat est intéressant puisque l'on obtient une DTrace de plusieurs centaines de lignes d'opérations élémentaires.

Posté par Hugo Hamon, le 09/12 à 10:43

Le truss permet de déterminer quelles fonctions, de quelles librairies internes et avec quels paramètres d'entrée sont appelées.

Posté par Hugo Hamon, le 09/12 à 10:41

Technique 3 d'analyse dynamique : strace / truss

Le strace consiste à analyser la trace entière d'exécution des appels systèmes afin de déterminer le nombre d'appels de procédures élémentaires, les temps d'exécution consommés...

Posté par Hugo Hamon, le 09/12 à 10:37

Technique 2 d'analyse dynamique : l'analyse de la pile d'appel de fonctions

A l'aide de XDebug toujours, il est possible d'analyser comment les fonctions sont appelées les unes dans les autres. Pour chaque appel, XDebug détermine quels sont les paramètres d'entrée et de sortie, quelle est la quantité de mémoire utilisée, quel est le temps d'exécution consommé...

Posté par Hugo Hamon, le 09/12 à 10:34

Technique 1 d'analyse dynamique : le profiling

La première technique consiste à analyser l'exécution du code PHP.

L'extension XDebug de Derick Rethans (toujours lui :) ) permet de réaliser ces opérations de profiling du code PHP. Le résultat du profiling peut être visualisé et analysé dans un programme tel que KCacheGrind ou WinCacheGrind.

Le programme KCacheGrind (Linux / Windows) permet elle aussi de réaliser du profiling d'exécution afin de déterminer quelles sont les fonctions les plus appelées, celles qui prennent le plus de temps...

Posté par Hugo Hamon, le 09/12 à 10:26

3 ème technique d'analyse statique : l'Opcode Dump

L'extension VLD de Derick Rethans (http://www.derickrethans.nl/vld.php) permet d'obtenir le résultat de l'exécution d'un code PHP sous la forme d'un tableau qui liste toutes les opérations élémentaires (opcodes). L'analyse de ces résultats peut ainsi permettre d'évaluer les performances du code.

Posté par Hugo Hamon, le 09/12 à 10:17

Techniques d'analyses statiques :

* Text munching :

- Par régex. L'objectif est de matcher dans son code des motifs de mauvaises pratiques par exemple.
- Par l'écriture de tests unitaires.

* Tokenizer :

- Le tokenizer interne de PHP permet d'auditer un script PHP et de générer une série de tokens représentant chaque partie importante du script audité : les parenthèses, accolades, returns, functions, string, variables, espaces blancs...

Cela peut permettre d'identifier les appels de fonctions.