Τα δύο πρώτα ανήκουν στην πρώτη φάση της υλοποίησης και τα υπόλοιπα δύο είναι το αντικείμενο της παρούσας εργασίας.
Η διαδικασία ανάλυσης γίνεται μετά το τέλος της εκτέλεσης της εφαρμογής (Post Mortem). Προσπαθώντας να ελαττώσουμε την καθυστέρηση στον χρόνο εκτέλεσης, που οφείλεται στην εισαγωγή του κώδικα καθοδήγησης χρησιμοποιούμε ίχνη μειωμένου μεγέθους. Δεν γίνεται εξαγωγή χρονοσφραγίδας και για κάθε γεγονός κατανάλωσης χρόνου εξάγεται μόνο ένα ίχνος.
Η ανάλυση έχει ως στόχο την παραγωγή της ακολουθίας των γεγονότων για την κάθε διεργασία καθώς και των συγκερασμό τους σε μία ακολουθία. Η διαδικασία αυτή στηρίζεται σε εξαρτήσεις μεταξύ των γεγονότων και έχει ως αποτέλεσμα την παραγωγή λογικών χρονοσφραγίδων. Οι εξαρτήσεις προκύπτουν από τη σειριακότητα του κώδικα, την ενδοεπικοινωνία και τον συγχρονισμό μεταξύ των διεργασιών της εφαρμογής.
Η απεικόνιση της ακολουθίας αυτής γίνεται από μια επέκταση του Paragraph. Η διασύνδεση με το Paragraph έγινε με χρήση ενός φίλτρου που μετατρέπει τα ίχνη που παράγει ο ArrayTracer σε γεγονότα απεικόνισης μορφής PICL [13]. To Paragraph επεκτάθηκε με την προσθήκη νέων διαγραμμάτων, ώστε να καλύπτει τις δυνατότητες του ArrayTracer.
ArrayTracer's basic components are the following :
The first two parts belong to the first phase of the tools implementation. The last two are the subject of this thesis.
The analysis procedure takes place at Post-Mortem time. We tried to reduce the dilation introduced by ArrayTracer at the application's execution time, by producing reduced size trace records. These trace records do not contain timestamps. Besides that we reduced the number of trace records dumped. For each time consuming event we only produce one trace record instead of two.
During the trace analysis procedure we must produce each process's event sequence and merge them in a total event sequence. To do that we construct logical timestamps according to dependencies that hold for the application processes. These dependencies result from the serial code executed, the interprocess communication and synchronization.
To visualize the results we linked ArrayTracer with Paragraph. This was done with the implementation of a filter that transforms ArrayTracer's traces to PICL [13] trace format events. We extended Paragraph with new displays that cover ArrayTracer's extra trace capabilities (Variables References, Subroutine/Function Calls).
[ ]
[]