vendredi 4 février 2005
Day 3 : profiling Java code et préparation des tests.
Par darksword, vendredi 4 février 2005 à 21:58 :: General
Un profiler est une application qui permet de monitorer (temps réel ou non) le fonctionnement d'un programme en details. On obtient par exemple un compte rendu sur les appels de fonctions, leur temps d'execution, le nombre d'instance de chaque type d'objet crée, la taille mémoire occupée.
Je voulais un profiler sur le programme de détection de véhicule, afin de voir si certaines parties étaient bloquantes. Le but de ce programme est d'obtenir une estimation des distances des véhicules rencontrés à l'instant x et à l'instant x + 3secondes et cela à partir d'une séquence vidéo de circulation filmé en condition réelle. Ce programme tourne quasiment en temps-réel sous windows sur les dell-670 en utilisant les 2 processeurs à 50%. Par contre sous linux, le programme est très ralenti (fonctionne à moins de 50 % du temps réel). Ne sachant pas comment monitorer chaque processeur independamment, je ne sais pas si la JVM sous linux arrive à répartir équitablement le travail. (@todo : trouver comment monitorer le bi-processeurs) Je voulais donc soir si une méthode particulière prenait un temps anormal. Cependant je n'ai pour l'instant pas détecter d'anomalies particulières. Je ne peux faire pour l'instant que des hypothèses :
- Il y a un problème d'I/O sous linux.
- Il y a un problème d'affichage sous linux.
- La JVM n'arrive pas à repartir le travail entre les deux processeurs.
- La fonction Java drawImage() est mal implémentée sous linux.
- Un autre problème est à l'origine du ralentissement.
J'ai continué à lire de la documentation sur la possible implémentation de threads "distribués". Pour assimiler les détails, il va falloir absolument que je me fasse un résumé sur :
- L'utilisation mémoire d'un processus (quel registre sont utilisé, etc ...)
- Evenements inhérents à la création de Threads.
- Utilisation mémoire d'un Threads et liste des dépendance coté utilisateur et kernel.
J'ai aussi relu avec attention la documentation sur la DJVM, qui pourrait finalement être une des possibilités à retenir. Le problème reste cependant présent pour les programmes en C.
Etant donné que les personnes les plus "aware" sont certainement celles qui produise le plus de résultat, j'ai envoyé un mail à Gian Paolo Ghilardi, l'auteur de "Consideration on openMosix". Il terminait son article en disant qu'il n'avait trouvé aucune solution pratique au problème de la migration des threads, mais qu'un jour ou l'autre Java et openMosix finirait par cohabiter. Je lui ait donc demandé si ce jour était arrivé. S'il ne réponds pas d'ici mercredi, j'enverrais un mail à Moshe Bar qui est à l'origine d'OpenMosix. Tant qu'à faire, autant prendre l'information à sa source.






