Analyser le code permet de vérifier ses fonctionnalités, détecter des bogues ou améliorer sa performance. L’analyse du code peut être statique ou dynamique. Des approches combinants les deux analyses sont plus appropriées pour les applications de taille industrielle où l’utilisation individuelle de chaque approche ne peut fournir les résultats souhaités.
Les approches combinées appliquent l’analyse dynamique pour déterminer les portions
à problèmes dans le code et effectuent par la suite une analyse statique concentrée sur
les parties identifiées. Toutefois les outils d’analyse dynamique existants génèrent des
données imprécises ou incomplètes, ou aboutissent en un ralentissement inacceptable du temps d’exécution.
Lors de ce travail, nous nous intéressons à la génération de graphes d’appels dynamiques complets ainsi que d’autres informations nécessaires à la détection des portions à
problèmes dans le code. Pour ceci, nous faisons usage de la technique d’instrumentation dynamique du bytecode Java pour extraire l’information sur les sites d’appels, les sites de création d’objets et construire le graphe d’appel dynamique du programme. Nous démontrons qu’il est possible de profiler dynamiquement une exécution complète d’une application à temps d’exécution non triviale, et d’extraire la totalité de l’information à un coup raisonnable. Des mesures de performance de notre profileur sur trois séries de benchmarks à charges de travail diverses nous ont permis de constater que la moyenne du coût de profilage se situe entre 2.01 et 6.42.
Notre outil de génération de graphes dynamiques complets, nommé dyko, constitue
également une plateforme extensible pour l’ajout de nouvelles approches d’instrumentation. Nous avons testé une nouvelle technique d’instrumentation des sites de création d’objets qui consiste à adapter les modifications apportées par l’instrumentation au bytecode de chaque méthode. Nous avons aussi testé l’impact de la résolution des sites d’appels sur la performance générale du profileur. / Code analysis is used to verify code functionality, detect bugs or improve its performance. Analyzing the code can be done either statically or dynamically. Approaches
combining both analysis techniques are most appropriate for industrial-scale applications where each one individually cannot provide the desired results. Blended analysis,
for example, first applies dynamic analysis to identify problematic code regions and then performs a focused static analysis on these regions. However, the existing dynamic
analysis tools generate inaccurate or incomplete data, or result in an unacceptably slow execution times.
In this work, we focus on the generation of complete dynamic call graphs with additional information required for blended analysis. We make use of dynamic instrumentation techniques of Java bytecode to extract information about call sites and object
creation sites, and to build the dynamic call graph of the program. We demonstrate that it
is possible to profile real-world applications to efficiently extract complete and accurate
information. Performance measurement of our profiler on three sets of benchmarks with
various workloads places the overhead of our profiler between 2.01 and 6.42.
Our profiling tool generating complete dynamic graphs, named dyko, is also an extensible platform for evaluating new instrumentation approaches. We tested a new adaptive
instrumentation technique for object creation sites which accommodates instrumentation
to the bytecode of each method. We also tested the impact of call sites resolution on the overall performance of the profiler.
Identifer | oai:union.ndltd.org:umontreal.ca/oai:papyrus.bib.umontreal.ca:1866/6313 |
Date | 11 1900 |
Creators | Ikhlef, Hajar |
Contributors | Dufour, Bruno |
Source Sets | Université de Montréal |
Language | French |
Detected Language | French |
Type | Thèse ou Mémoire numérique / Electronic Thesis or Dissertation |
Page generated in 0.0024 seconds