Η νέα μέθοδος διαχείρισης μνήμης του Facebook

Ένα από τα μέλη της ομάδας ανάπτυξης κοινωνικών δικτύων Facebook, Ρομάν Γκουστσίν, πρότεινε στη λίστα αλληλογραφίας προγραμματιστή ένα σύνολο Ενημερωμένες εκδόσεις κώδικα του πυρήνα Linuxμε στόχο τη βελτίωση της διαχείρισης της μνήμης μέσω της εφαρμογής ενός νέου ελεγκτή διαχείρισης μνήμης - slab (ελεγκτής μνήμης πλακών).

κατανομή πλακών είναι ένας μηχανισμός διαχείρισης μνήμης που έχει σχεδιαστεί για την πιο αποτελεσματική κατανομή της μνήμης και την εξάλειψη του σημαντικού κατακερματισμού. Η βάση αυτού του αλγορίθμου είναι η αποθήκευση της εκχωρημένης μνήμης που περιέχει ένα αντικείμενο συγκεκριμένου τύπου και η επαναχρησιμοποίηση αυτής της μνήμης την επόμενη φορά που θα εκχωρηθεί για ένα αντικείμενο του ίδιου τύπου. Αυτή η τεχνική εισήχθη για πρώτη φορά στο SunOS από τον Jeff Bonwick και τώρα χρησιμοποιείται ευρέως στους πυρήνες πολλών λειτουργικών συστημάτων Unix, συμπεριλαμβανομένων των FreeBSD και Linux.

Ο νέος ελεγκτής βασίζεται στη μετακίνηση της λογιστικής πλακών από το επίπεδο σελίδας μνήμης στο επίπεδο αντικειμένου πυρήνα, γεγονός που καθιστά δυνατή την κοινή χρήση μιας σελίδας πλακών σε διαφορετικές cgroups, αντί να εκχωρείται μια ξεχωριστή κρυφή μνήμη για κάθε cgroup.

Με βάση τα αποτελέσματα των δοκιμών, προκύπτει ότι η προτεινόμενη μέθοδος διαχείρισης μνήμης επιτρέπει την αύξηση αποτελεσματικότητα χρησιμοποιώντας πλάκα να 45%, και θα μειώσει επίσης τη συνολική κατανάλωση μνήμης του πυρήνα του λειτουργικού συστήματος. Επίσης, με τη μείωση του αριθμού των σελίδων που διατίθενται για slab, ο κατακερματισμός της μνήμης στο σύνολό του μειώνεται, κάτι που δεν μπορεί παρά να επηρεάσει την απόδοση του συστήματος.

Ο νέος ελεγκτής έχει δοκιμαστεί σε διακομιστές παραγωγής Facebook εδώ και αρκετούς μήνες και μέχρι στιγμής αυτή η δοκιμή μπορεί να ονομαστεί επιτυχημένη: χωρίς απώλεια απόδοσης και χωρίς αύξηση στον αριθμό των σφαλμάτων, παρατηρήθηκε σαφής μείωση στην κατανάλωση μνήμης - σε ορισμένους διακομιστές έως 1 GB. Αυτός ο αριθμός είναι αρκετά υποκειμενικός, για παράδειγμα, προηγούμενες δοκιμές έδειξαν ελαφρώς χαμηλότερα αποτελέσματα:

  • 650-700 MB στο web frontend
  • 750-800 MB σε διακομιστή με προσωρινή μνήμη βάσης δεδομένων
  • 700 MB σε διακομιστή DNS

>>> Σελίδα του συγγραφέα στο GitHub


>>> Πρώιμα αποτελέσματα δοκιμών

Πηγή: linux.org.ru

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