Pour l'activer il faut compiler l'exécutable avec une option particulière, lancer le traitement puis extraire les résultats obtenus :
- Modifier le .profile pour exporter, dans en fin de chapitre "VARIABLES D'ENVIRONNEMENT COBOL" la variable COBPRFDIR=$TMPDIR
- Faites une RBZ du programme à analyser avec conservation des sources
- Dans $TMP contrôlez la présence des fichiers *.idy et *.cbl
- Retrouvez (dans le log de la RBZ) et adaptez la commande de compilation Cobol "cob" pour y ajouter l'option -C PROFILE
- Recompilez le programme (exemple avec FFCALDBI) avec l'option -C PROFILE
- Copiez le généré (suffixe ".so" en général - consulter ${SUFMOD}) dans $SIGACS/prod/gnt
- Conservez le fichier *.idy dans $TMP
- Si le programme concerné est un programme TP, faites un arrêt / démarrage de OpenHR,
- Exécutez votre traitement,
- Pour en lire les données, utilisez la commande cobprof (ici avec une limitation a 25 lignes) :
cobprof FFCALDBI.ipf +LIST | head -25
Total time: 1517240 milliseconds. Module called once.
% time time entries ms/entry paragraph
-------------------------------------------------------------------------------
45.35 688110 26 26466 UTTDP424-XB0B0LEC-XY
10.99 166750 308687680 0 UTTBPUUU-XB0BBL5J-NC
10.87 164900 308678970 0 UTTBPUUU-XB0BBL5J-NE
10.51 159450 308678970 0 UTTBPUUU-XB0BBL5J-NC-900
10.32 156650 308678970 0 UTTBPUUU-XB0BBL5J-NE-FN
5.90 89460 151 592 GIP-ECR-01
0.95 14400 26188434 0 UTTBPUUU-XB0BBL5J-AF
0.94 14280 26192800 0 UTTBPUUU-XB0BBL5J-AE
0.93 14150 26188434 0 UTTBPUUU-XB0BBL5J-AE-900
0.92 13930 340 41 GIPLEC-01
0.78 11890 26188434 0 UTTBPUUU-XB0BBL5J-AF-FN
0.13 1950 22757 0 F8LCD
0.12 1770 5550 0 RECHJOUR-01
0.09 1410 150 9 VALCOND-DS3
0.07 1020 1587369 0 RECH-ZYX3-01
0.06 920 8710 0 UTTBPUUU-XB0BBL5J-PA
0.06 910 150 6 TRICOND
0.05 820 1582719 0 RECH-ZYX3-02
0.04 560 150 4 F5025-2
0.04 550 1 550 F-SGR2-01-TDP401
NB : En cas de message "Open Fail on .idy for FFCALDBI.idy", c'est que le fichier *.idy a été perdu. Pour pouvoir utiliser cobprof il vous faut le recréer (commande cob).
Vous trouverez :
- Total time : temps CPU total
- paragraph : fonction cobol concernée,
- %time : pourcentage du temps total d'exécution passé dans ladite fonction,
- time : temps en ms
- entries : nombre de passages dans la fonction
- ms/entry : temps moyen par passage
Notez le "Module called once" : le programme a été exécuté une seule fois (les statistiques sont cumulées à chaque exécution - si vous ne souhaitez pas cela, vous devez supprimer/renommer le *.ipf avant chaque exécution).
Si une fonction appelle un sous programme, le temps de ce sous programme est comptabilisé dans la fonction - sauf si ce sous programme est lui même compilé avec l'option "PROFILE".
La validité des résultats fournis par cet utilitaire est toutefois sujette à caution ... En effet, dans mon exemple :
- UTTDP424-XB0B0LEC-XY est une fonction "vide" qui ne fait qu'un "perform" vers UTTBPUUU-XB0BBL5J ... qu'elle prenne 688 secondes pour 26 appels n'est pas compréhensible,
- et si le temps attribué à cette fonction cumule celui des fonctions performées, pourquoi voit-on alors plus bas des références à ces même fonctions UTTBPUUU-XB0BBL5J ?
- Mode "Profiler" activé le traitement complet dure 28 minutes, mais une fois ce mode désactivé (recompilation sans l'option -C PROFILE) le temps de traitement passe à 3 minutes !
- En fait le mode "Profiler" semble extrêmement sensible aux boucles (ici 300.000 passages dans chacune des fonctions UTTBPUUU-XB0BBL5J-NC/NE...) et ralentit significativement le traitement ...
En conclusion, si ce Cobprof vous donne la cause de vos problèmes de performance, tant mieux ... Mais regardez son analyse avec circonspection.
- Limitez son usage a des cas de "simples" (ex : un seul dossier traité).
- Contrôlez que les temps de traitement avec / sans le mode "Profiler" est inchangé.
PS : Pour supprimer ce mode "Profile", refaites une RBZ sur le module concerné.
Les temps affichés par le profiler sont FAUX. Les 2 informations à prendre en compte sont:
RépondreSupprimer- Le nombre d'exécutions de la fonction (time)
- Le pourcentage du temps total, en sachant que le temps des fonctions ou des programmes appelés est inclus.
En général un job lancé avec le profiler prend 3 fois plus de temps que lorsqu'il est lancé normalement.