Η μετάβαση σε πολυπύρηνες αρχιτεκτονικές παρουσιάζει διάφορες προκλήσεις - τα προγράμματα
πρέπει να παραλλοποιηθούν αποδοτικά, αποφεύγοντας προβλήματα όπως αμοιβαίος αποκλεισμός
και σημεία συμφόρησης. Ακόμα και σε γλώσσες προγραμματισμού όπως η Erlang, της οποίας το μοντέλο ταυτoχρονισμού και οι βάσεις της στο συναρτησιακό προγραμματισμό επιτρέπουν στο προγραμματιστή να αποφύφει τις περισσότερες μορφές αμοιβαίου αποκλεισμού και συνθηκών ανταγωνισμού και να δημιουργήσει ασφαλείς, επεκτάσιμες και αποδοτικές εφαρμογές, πολλές φορές είναι αναγκαίο να εξεταστεί η πορεία εκτέλεσης ώστε να εντοπιστούν σημεία συμφόρησης και άλλα προβλήματα που περιορίζουν την επιτάχυνση λόγω των πολλαπλών πυρήνων.
Σε αυτή τη διπλωματική εργασία θα περιγράψουμε την αρχιτεκτονική, σχεδιαστικές αποφάσεις
και λεπτομέρειες υλοποίησης ενός νέου εργαλείου profiling για την Erlang με το όνομα Schedplot.
Το εργαλείο αυτό συλλέγει δεδομένα κατά τη διάρκεια εκτέλεσης ενός προγράμματος
Erlang και στη συνέχεια παρουσιάζει το βαθμό αξιοποίησης ανά το χρόνο του κάθε scheduler
(ο οποίος συνήθως αντιστοιχεί σε ένα νήμα ΚΜΕ που αντιστοιχεί σε ένα πυρήνα) και του συλλέκτη σκουπιδιών. Προσπαθήσαμε να σχεδιάσουμε την αναπαράσταση ώστε ο μεγάλος όγκος δεδομένων, που παράεται από την εκτέλεση προγραμμάτων Erlang με υψηλό βαθμό παραλληλοποίησης σε πολυπύρηνες αρχιτεκτονικές, να είναι εύκολα κατανοητός. Ένα από τα κυριότερα ζήτημα ήταν η δειγματοληψία του χρονοδιαγράμματος ώστε να προκύψει μια
σμίκρυνση που να μην αλλοιώνει τη σημασιολογία. Επίσης, για τη γρήγορη αποθήκευση των δεδομένων χωρίς σημαντική επιβάρυνση του χρόνου εκτέλεσης σχεδιάστηκε μια δυαδική κωδικοποίηση. Τέλος, μελετήσαμε την επιβάρυνση εξαιτίας της χρήσης της erlang:trace/3 που έδειξε ότι περαιτέρω βελτίωση θα επιτύχει σημαντική βελτίωση της επεκτασιμότητας
και μείωση της επιβάρυνσης.
The shift towards multi-core architectures poses several challenges in software development
as programs should be efficiently parallelized while avoiding related dangers such as
deadlocks and bottlenecks. Even in languages such as Erlang, whose concurrency model and functional foundations enable the programmer to avoid most deadlocks and race conditions and build safe, scalable and efficient applications, it is often required to examine the execution in order to detect bottlenecks and other factors that limit the speedup.
This thesis describes the architecture, design choices and implementation details of a new
profiling tool for Erlang named Schedplot. Schedplot gathers data during the execution
time and then, offline, visualizes the workload of each scheduler (which most of the time
maps in a CPU-thread which maps in a core) and the garbage collector. We tried to optimize
the graphical representation in order to aid the user’s comprehension of the large volume
of data generated by highly scalable Erlang programs run in multicore architectures;
one of the main problems encountered was sampling the timeline to provide a zoomed-out
view without altering the semantics of the produced representation. Another challenge
was storing the produced data sufficiently fast and minimize the overhead caused; according
to the evaluation, by using a custom binary encoding, it was reduced to the point of
being insignificant. Last, we examined the overhead caused by using erlang:trace/3 concluding
that further improvements should be made to improve the scalability and reduce the overall overhead.