> Tech > Techniques d’optimisation avancées : profilage d’application

Techniques d’optimisation avancées : profilage d’application

Tech - Par Renaud ROSSET - Publié le 17 avril 2014
email

Après avoir découvert les niveaux d'optimisation et les mesures de performance de base, le moment est venu d'aborder quelques autres techniques visant des applications haute performance.

La première de ces techniques est le profilage d’application.

Remarque : Dans ces articles, je me cantonne aux principes de base de chacune de ces techniques. Heureusement, le chapitre 13 du manuel ILE Concepts décrit en détail ces fonctions d’optimisation. Ce manuel se trouve dans l’IBM i 7.1 Information Center.

Les optimisations effectuées aux niveaux 30 et 40 sont excellentes, mais présentent un inconvénient : celui de traiter tout le code uniformément. Autrement dit, si votre application contient une logique rarement utilisée, (code froid), le traducteur optimisant lui accorde la même importance qu’au code exécuté intensivement (code chaud). Si le traducteur distingue les parties du code chaudes et froides, il optimisera mieux le code chaud parce qu’il n’aura pas à tenir compte des effets négatifs sur le code froid.

Le but du profilage d’application est de détecter les points chauds (hotspots) dans le code à l’exécution, et d’optimiser au mieux vos programmes afin que les points chauds s’exécutent le plus rapidement possible. Par exemple, des hot paths (hot traces) de votre code sont regroupés  en mémoire pour optimiser le cache matériel et le paging en mémoire. Après quoi, des optimisations poussées sont appliquées à ces hot paths.

Le profilage d’application s’effectue en trois phases :

  1. Instrumentation
  2. Collecte de données
  3. Application des données du profil

Pour commencer l’instrumentation de l’application, vous devez recréer celle-ci en sélectionnant ‘une option spéciale qui ordonne au traducteur d’insérer des fragments de profilage dans le code. Ces fragments incrémentent des compteurs chaque fois qu’un événement important se produit : branchement, appel de procédure, ou autre. Par conséquent, quand ces fragments sont exécutés, ils supervisent le comportement du programme.

Une fois les programmes instrumentés créés, vous devez exécuter l’application pour collecter les données du profil. Il faut bien sûr que les données introduites à ce stade représentent bien celles que votre application verra dans la réalité. Durant l’exécution de programmes instrumentés, les fragments de profilage incrémentent leurs compteurs respectifs pour enregistrer le flux de contrôle dans l’application.

Au terme de la collecte des données, vous devez recréer vos programmes en utilisant une option spéciale différente qui ordonne au traducteur d’appliquer les données du profil. Le traducteur lit les données des compteurs en mémoire et s’en sert pour savoir quelles portions du code sont chaudes ou froides. Après quoi, il optimise au mieux les hot traces.

Exemple d’étapes pour le profilage d’application

La première étape du profilage d’application consiste à s’assurer que le code est entièrement testé au niveau d’optimisation 30 ou 40. Comme le profilage d’application demande un travail supplémentaire, il vaut mieux l’appliquer vers la fin du cycle de développement.

Pour ajouter l’instrumentation à votre programme profpgm dans la bibliothèque applib, exécutez la commande suivante :

CHGPGM PGM(applib/profpgm) PRFDTA(*COL)

Le traducteur optimisant recrée l’application en utilisant les mêmes options ligne de commandes que vous avez sélectionnées pendant la création initiale. En outre, le traducteur insère des fragments de profilage dans le code, comme l’ordonne le paramètre  PRFDTA(*COL).

A présent, exécutez la commande suivante pour dire au système que vous êtes prêt à collecter les données de profil :

STRPGMPRF

La commande Start Program Profiling valide la collecte de données de profil dans tout le système et pas uniquement dans un seul job. Cette condition est importante pour le profilage d’applications complexes dans lesquelles de multiples jobs coopèrent. Cependant, comme cette commande agit sur tout le système, soyez très prudents si plus d’une personne pratique le profilage d’application sur le même système.

Emettez la commande STRPGMPRF ! Si vous l’oubliez, vos programmes instrumentés ne recueilleront aucune donnée.

Le moment est venu d’exécuter l’application instrumentée, en remplissant deux conditions : utiliser des données d’entrée représentatives et exécuter le programme suffisamment longtemps pour obtenir des résultats utiles. À titre indicatif, utilisez suffisamment de données pour exécuter les parties importantes du code au moins 1000 fois.

Vous observerez que les programmes instrumentés s’exécutent plus lentement qu’avant l’instrumentation. Cela s’explique par la présence des fragments de profilage dans le code. En moyenne, le temps d’exécution est plus long d’environ un tiers.

Quand vous estimerez avoir recueilli suffisamment de données, arrêtez la collecte des données de profil pour l’ensemble du système, par la commande suivante :

ENDPGMPRF

Cette commande arrête la collecte de toutes les données de profil jusqu’à la prochaine invocation de STRPGMPRF.

Vous voilà prêt à bénéficier de votre travail supplémentaire. Appliquez les données de profil en exécutant cette commande :

CHGPGM PGM(applib/profpgm) PRFDTA(*APYALL)

Elle ordonne au traducteur optimisant de recréer l’application, mais cette fois-ci en utilisant les données de profil pour guider l’optimisation du code chaud.

Téléchargez cette ressource

Guide de Sécurité IA et IoT

Guide de Sécurité IA et IoT

Compte tenu de l'ampleur des changements que l'IA est susceptible d'entraîner, les organisations doivent élaborer une stratégie pour se préparer à adopter et à sécuriser l'IA. Découvrez dans ce Livre blanc Kaspersky quatre stratégies efficaces pour sécuriser l'IA et l'IoT.

Tech - Par Renaud ROSSET - Publié le 17 avril 2014