Η Microsoft άνοιξε τον κώδικα για το σύστημα εκχώρησης μνήμης mimalloc

Η Microsoft άνοιξε μια βιβλιοθήκη με άδεια MIT mmalloc από υλοποιήσεις ενός συστήματος εκχώρησης μνήμης που δημιουργήθηκε αρχικά για στοιχεία χρόνου εκτέλεσης γλωσσών κόκας и Lean. Το Mimalloc είναι προσαρμοσμένο για χρήση σε τυπικές εφαρμογές χωρίς αλλαγή του κωδικού τους και μπορεί να λειτουργήσει ως διαφανής αντικατάσταση για τη λειτουργία malloc. Υποστηρίζει εργασία σε Windows, macOS, Linux, BSD και άλλα συστήματα παρόμοια με το Unix.

Το βασικό χαρακτηριστικό του mimalloc είναι η συμπαγής εφαρμογή του (λιγότερες από 3500 γραμμές κώδικα) και η πολύ υψηλή απόδοση. ΣΕ δοκιμές που πραγματοποιήθηκαν Το mimalloc ξεπέρασε όλες τις ανταγωνιστικές βιβλιοθήκες εκχώρησης μνήμης, συμπεριλαμβανομένων jemalloc, tcmalloc, ριπή, σμίριο и Θησαυρός.

Για την αξιολόγηση της απόδοσης, ένα σύνολο υπαρχόντων τυπικές δοκιμές Σε ορισμένες δοκιμές, το mimalloc είναι πολλές φορές ταχύτερο από άλλα συστήματα· για παράδειγμα, στη δοκιμή μετακίνησης αντικειμένων μεταξύ διαφορετικών νημάτων, το mimalloc αποδείχθηκε ότι ήταν περισσότερο από 2.5 φορές ταχύτερο από το tcmalloc και το jemalloc. Ταυτόχρονα, στις περισσότερες δοκιμές, παρατηρείται επίσης χαμηλότερη κατανάλωση μνήμης· σε ορισμένες περιπτώσεις, η κατανάλωση μνήμης μπορεί να μειωθεί κατά 25%.

Η Microsoft άνοιξε τον κώδικα για το σύστημα εκχώρησης μνήμης mimalloc

Οι υψηλές επιδόσεις επιτυγχάνονται κυρίως με τη χρήση της δωρεάν κοινής χρήσης λιστών. Αντί για μια μεγάλη λίστα, το mimalloc χρησιμοποιεί μια σειρά από μικρότερες λίστες, καθεμία από τις οποίες είναι συνδεδεμένη σε μια σελίδα μνήμης. Αυτή η προσέγγιση μειώνει τον κατακερματισμό και αυξάνει την εντοπιότητα των δεδομένων στη μνήμη. Μια σελίδα μνήμης είναι ένα ομαδοποιημένο σύνολο μπλοκ παρόμοιου μεγέθους. Σε συστήματα 64 bit, το μέγεθος σελίδας είναι συνήθως 64 KB. Εάν δεν υπάρχουν κατειλημμένα μπλοκ στη σελίδα, ελευθερώνεται πλήρως και η μνήμη επιστρέφεται στο λειτουργικό σύστημα, γεγονός που μειώνει το κόστος της μνήμης και τον κατακερματισμό σε μακροχρόνια προγράμματα.

Η βιβλιοθήκη μπορεί να συμπεριληφθεί στο στάδιο της σύνδεσης ή να φορτωθεί για ένα ήδη συναρμολογημένο πρόγραμμα (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Η βιβλιοθήκη παρέχει επίσης API για ενσωμάτωση λειτουργικότητας στο χρόνο εκτέλεσης και λεπτομερή έλεγχο συμπεριφοράς, για παράδειγμα, για σύνδεση χειριστών απελευθέρωσης τεμπέλης μνήμης και μονότονα αυξανόμενους μετρητές αναφοράς. Είναι δυνατή η δημιουργία και χρήση πολλών «σωρούς» σε μια εφαρμογή για διανομή σε διαφορετικές περιοχές μνήμης. Είναι επίσης δυνατό να απελευθερωθεί πλήρως ο σωρός, χωρίς να περάσει και να ελευθερωθεί χωριστά τα αντικείμενα που βρίσκονται σε αυτόν.

Είναι δυνατή η κατασκευή της βιβλιοθήκης σε ασφαλή λειτουργία, στην οποία αντικαθίστανται ειδικές σελίδες ελέγχου μνήμης (φύλακες-σελίδες) στα όρια του μπλοκ και χρησιμοποιείται τυχαιοποίηση της διανομής μπλοκ και κρυπτογράφηση λιστών απελευθερωμένων μπλοκ. Τέτοια μέτρα καθιστούν δυνατό τον αποκλεισμό των πιο κοινών τεχνικών για την εκμετάλλευση υπερχείλισης buffer με βάση το σωρό. Όταν ενεργοποιείτε την Ασφαλή λειτουργία, η απόδοση μειώνεται κατά περίπου 3%.

Μεταξύ των χαρακτηριστικών του mimalloc, σημειώνεται επίσης ότι δεν είναι ευαίσθητο σε προβλήματα με φούσκωμα λόγω μεγάλου κατακερματισμού. Στη χειρότερη περίπτωση, η κατανάλωση μνήμης αυξάνεται κατά 0.2% για τα μεταδεδομένα και μπορεί να φτάσει το 16.7% για την κατανεμημένη μνήμη. Για την αποφυγή συγκρούσεων κατά την πρόσβαση σε πόρους, το mimalloc χρησιμοποιεί μόνο ατομικές λειτουργίες.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο