I. Qu'est un profil de code ?▲
Un profil de code est un outil indispensable permettant de repérer une fonction ou une instruction qui prennent trop de temps et qui doivent donc être refactorisées. Le repérage de ces fonctions ou instructions est un exercice difficile et en général mal fait si un outil de profilage n'est pas utilisé.
Un dicton indique que 80% du temps est passé dans 20% du code (on entend parfois aussi ce dicton avec les chiffres 90 et 10), ce sont ces 20% qui doivent être repérés.
Plusieurs méthodes de profilage existent. Chaque méthode a ses avantages et ses inconvénients. Il est aussi à noter que le temps d'exécution ne fait pas tout, le nombre d'instructions, absolu et par seconde, leur type, le comportement du cache, ... tous ces éléments peuvent être mesurés et donnent des informations.
I-A. Profil par échantillonnage▲
Le profil par échantillonnage consiste à regarder tous les n cycles/instructions/défauts de cache/... quelle est la fonction en cours d'exécution, ainsi que les fonctions parentes.
Ce type de profil est très facile à réaliser, le profileur exécutant simplement le code et mesurant régulièrement des valeurs : pas d'intrusion, vitesse quasi-identique à la réalité. En revanche, le profil n'est pas exact et donc doit être pris avec précaution. Il est nécessaire de tester avec plusieurs valeurs de fréquence d'échantillonnage.
I-B. Profil par instrumentation▲
L'instrumentation modifie le programme testé en ajoutant à chaque appel de fonction une fonction d'instrumentation. Celle-ci va mesurer le temps d'appel, le nombre d'instructions exécutés, ... Tout cela grâce à des compteurs internes au processeur qui permet d'accéder à ces valeurs.
Ce profil est intermédiaire entre l'échantillonnage et l'émulation. Il est plus intrusif que les deux autres, le programme étant modifié, mais le résultat est plus exact. En revanche, du code supplémentaire est exécuté, donc le résultat n'est pas exact.
I-C. Profil par émulation▲
L'émulation consiste à exécuter le programme sur un processeur virtuel. Tout peut être mesuré de manière exacte.
Le principal inconvénient de cette méthode est sa lenteur. En effet, l'émulation d'un processeur est complexe. De plus, le processeur émulé n'est pas le processeur utilisé, donc les résultats ne sont pas généralisables. En revanche, pour le processeur émulé, ils sont exacts.