Ανάπτυξη μεθοδολογίας για δυναμική ανάθεση μνήμης σε πολυπύρηνα επεξεργαστικά συστήματα
Authors: Κούτρας Ιωάννης 
Published: September 2021

Η διατριβή αυτή παρουσιάζει μία μεθοδολογία για τη δημιουργία δυναμικών αναθετών μνήμης (dynamic memory allocators) σε μία μεγάλη ποικιλία υπολογιστικών συστημάτων, από ενσωματωμένα συστήματα έως εξυπηρετητές υψηλού φόρτου. Πιστεύουμε ότι οι σημερινές υλοποιήσεις δυναμικών αναθετών μνήμης χαρακτηρίζονται από γενικεύσεις, με αποτέλεσμα να μη χρησιμοποιούν επαρκώς χαρακτηριστικά και λειτουργίες των μοντέρνων υπολογιστικών συστημάτων πάνω στα οποία εκτελούνται. Προτείνουμε ένα πλαίσιο λογισμικού, το οποίο αποκαλούμε dmmlib, μέσα από το οποίο προγραμματιστές εφαρμογών μπορούν να δημιουργήσουν την δική τους βιβλιοθήκη δυναμικής διαχείρισης μνήμης. Επιλέγοντας διαφορετικές οργανώσεις μνήμης, πολιτικές και μηχανισμούς, η παραγόμενη βιβλιοθήκη μπορεί να χρησιμοποιηθεί άμεσα από εφαρμογές χωρίς να είναι αναγκαία η επαναμεταγλώττιση των τελευταίων. Η dmmlib προσφέρει δυνατότητες αλλαγής των παραμέτρων του αναθέτη για την περαιτέρω βελτίωση των επιδόσεων των εφαρμογών, όπως επίσης και την δυνατότητα εκτενούς παρακολούθησης της λειτουργίας της μνήμης.Σε αυτήν την διατριβή, δείχνουμε ότι η dmmlib μπορεί να χρησιμοποιηθεί αποδοτικά τόσο σε ενσωματωμένα συστήματα με περιορισμένο οικοσύστημα λογισμικού όσο και σε εξυπηρετητές γενικού σκοπού και υψηλής υπολογιστικής απόδοσης, ενώ μπορεί να αποτελέσει πεδίο μελέτης και ανάπτυξης πολιτικών και μηχανισμών για δυναμική διαχείριση μνήμης. Ξεκινούμε αναλύοντας τις τρέχουσες προσεγγίσεις στη δυναμική διαχείριση μνήμης, συμπεριλαμβανομένων δημοφιλών αναθετών που χρησιμοποιούνται σε ρεαλιστικές εφαρμογές και λειτουργικά συστήματα, και δείχνουμε πλεονεκτήματα και πιθανές ελλείψεις των αναθετών αυτών σε σύγχρονα συστήματα και εφαρμογές. Στησυνέχεια, παρουσιάζουμε την dmmlib, και δείχνουμε τα κίνητρα και τις αντίστοιχες υλοποιήσεις των πολιτικών και των ευρύτερων μηχανισμών. Δείχνουμε επίσης πιθανούς τρόπους εκτέλεσης των εφαρμογών με την dmmlib και πώς αυτές μπορούν να τροποποιήσουν την dmmlib κατά την εκτέλεσή τους.Παρουσιάζουμε επίσης χρήσεις της dmmlib πάνω σε τρεις διαφορετικές πλατφόρμες. Οι δύο πρώτες αφορούν ενσωματωμένα συστήματα, ενώ η τρίτη συστήματα γενικού σκοπού. Η πρώτη χρησιμοποιεί την P2012, έναν πολυπύρηνο επιταχυντή για ενσωματωμένα συστήματα. Η δυναμική ανάθεση μνήμης στην πλατφόρμα αυτή χρήζει ιδιαίτερης μεταχείρισης, καθώς μία επεξεργαστική μονάδα αναλαμβάνει την διαχείριση των πόρων για μία ομάδα 16 επεξεργαστών. Μεταφέρουμε και αξιολογούμε την dmmlib στην πλατφόρμα αυτή. Τα αποτελέσματά μας δείχνουν ότι αναθέτες που παράγονται από την dmmlib μπορεί να είναι ακόμα και 2,6 φορές πιο γρήγοροι από τον επίσημο αναθέτη της πλατφόρμας, χωρίς να διακινδυνεύει επιπλέον κόστος στη χρήση μνήμης. Στην δεύτερη πλατφόρμα δείχνουμε πώς η κλιμακωσιμότητα του υλικού επηρεάζει την απόδοση των δυναμικών αναθετών μνήμης. Για συστήματα με πολλαπλές επεξεργαστικές μονάδες, πειραματικά αποτελέσματα δείχνουν ότι δυναμικοί αναθέτες μνήμης χαμηλού επιπέδουαδυνατούν να αντεπεξέλθουν της πολυπλοκότητας και υπολείπονται αναθετών πουπαράγονται μέσα από την dmmlib. Τέλος, σε συστήματα γενικού σκοπού δείχνουμε πώς μπορούν να εκτιμηθούν τα μεγέθη μελλοντικών αιτημάτων μνήμης και πώς ο τρέχων αναθέτης μπορεί να χρησιμοποιήσει την πληροφορία αυτή, ώστε να τροποποιηθεί κατά την εκτέλεση της εφαρμογής. Η προσέγγισή μας εισάγει ελάχιστο επιπλέον κόστος, ενώ καταφέρνει να διατηρήσει τον κατακερματισμό της μνήμης στο ελάχιστο.