Κατανόηση της αρχιτεκτονικής NUMA

Understanding Numa Architecture



Ο σχεδιασμός υπολογιστών είναι πάντα ένας συμβιβασμός. Τα τέσσερα βασικά στοιχεία ενός υπολογιστή - η κεντρική μονάδα επεξεργασίας (CPU) ή ο επεξεργαστής, η μνήμη, ο αποθηκευτικός χώρος και ο πίνακας για τη σύνδεση των εξαρτημάτων (σύστημα διαύλου εισόδου/εξόδου) - συνδυάζονται όσο το δυνατόν πιο έξυπνα για να δημιουργήσουν μια μηχανή που είναι οικονομικά αποδοτικό και ισχυρό. Η διαδικασία σχεδιασμού περιλαμβάνει κυρίως μια βελτιστοποίηση προς επεξεργαστές (συνεπεξεργαστές, εγκατάσταση πολλαπλών πυρήνων), τύπο και ποσό μνήμης, αποθήκευση (δίσκοι, σύστημα αρχείων), καθώς και τιμή. Η ιδέα πίσω από τους επεξεργαστές και την αρχιτεκτονική πολλαπλών πυρήνων είναι να διανείμει λειτουργίες σε όσες μονάδες υπολογιστών στο μικρότερο δυνατό χώρο και να καταστήσει την παράλληλη εκτέλεση υπολογιστικών οδηγιών πιο διαθέσιμη και προσιτή. Όσον αφορά τη μνήμη, πρόκειται για το ποσό ή το μέγεθος που μπορεί να αντιμετωπιστεί από την μεμονωμένη υπολογιστική μονάδα και ποιος τύπος μνήμης λειτουργεί με τη μικρότερη δυνατή καθυστέρηση. Ο αποθηκευτικός χώρος ανήκει στην εξωτερική μνήμη και η απόδοσή του εξαρτάται από τον τύπο του δίσκου, το σύστημα αρχείων που χρησιμοποιείται, το νήμα, το πρωτόκολλο μεταφοράς, τον ιστό επικοινωνίας και τον αριθμό των συνδεδεμένων συσκευών μνήμης.

Ο σχεδιασμός των διαύλων εισόδου/εξόδου αντιπροσωπεύει τις αρτηρίες του υπολογιστή και καθορίζει σημαντικά πόσο και πόσο γρήγορα μπορούν να ανταλλαχθούν δεδομένα μεταξύ των μεμονωμένων στοιχείων που αναφέρονται παραπάνω. Η κορυφαία κατηγορία καθοδηγείται από εξαρτήματα που χρησιμοποιούνται στον τομέα του High Performance Computing (HPC). Από τα μέσα του 2020, μεταξύ των σύγχρονων εκπροσώπων της HPC είναι η Nvidia Tesla και η DGX, η Radeon Instinct και τα προϊόντα επιταχυντή που βασίζονται σε GPU Intel Xeon Phi (δείτε [1,2] για συγκρίσεις προϊόντων).







Κατανόηση του NUMA

Η μη ομοιόμορφη πρόσβαση μνήμης (NUMA) περιγράφει μια αρχιτεκτονική κοινής μνήμης που χρησιμοποιείται σε σύγχρονα συστήματα πολλαπλής επεξεργασίας. Το NUMA είναι ένα υπολογιστικό σύστημα που αποτελείται από πολλούς μεμονωμένους κόμβους με τέτοιο τρόπο ώστε η συνολική μνήμη να μοιράζεται μεταξύ όλων των κόμβων: σε κάθε CPU εκχωρείται η δική του τοπική μνήμη και μπορεί να έχει πρόσβαση σε μνήμη από άλλες CPU του συστήματος [12,7].



Το NUMA είναι ένα έξυπνο σύστημα που χρησιμοποιείται για τη σύνδεση πολλαπλών κεντρικών μονάδων επεξεργασίας (CPU) σε οποιαδήποτε ποσότητα μνήμης υπολογιστή διαθέσιμη στον υπολογιστή. Οι μεμονωμένοι κόμβοι NUMA συνδέονται μέσω ενός κλιμακούμενου δικτύου (δίαυλος εισόδου/εξόδου) έτσι ώστε μια CPU να μπορεί να έχει συστηματική πρόσβαση στη μνήμη που σχετίζεται με άλλους κόμβους NUMA.



Τοπική μνήμη είναι η μνήμη που χρησιμοποιεί η CPU σε έναν συγκεκριμένο κόμβο NUMA. Η ξένη ή η απομακρυσμένη μνήμη είναι η μνήμη που λαμβάνει μια CPU από έναν άλλο κόμβο NUMA. Ο όρος λόγος NUMA περιγράφει την αναλογία του κόστους πρόσβασης σε ξένη μνήμη προς το κόστος πρόσβασης στην τοπική μνήμη. Όσο μεγαλύτερη είναι η αναλογία, τόσο μεγαλύτερο είναι το κόστος, και επομένως τόσο περισσότερος χρόνος χρειάζεται για να αποκτήσετε πρόσβαση στη μνήμη.





Ωστόσο, διαρκεί περισσότερο από ό, τι όταν η CPU έχει πρόσβαση στη δική της τοπική μνήμη. Η τοπική πρόσβαση στη μνήμη είναι ένα σημαντικό πλεονέκτημα, καθώς συνδυάζει χαμηλή καθυστέρηση με υψηλό εύρος ζώνης. Αντίθετα, η πρόσβαση στη μνήμη που ανήκει σε οποιαδήποτε άλλη CPU έχει μεγαλύτερη καθυστέρηση και χαμηλότερη απόδοση εύρους ζώνης.

Κοιτάζοντας πίσω: Εξέλιξη πολλαπλών επεξεργαστών κοινής μνήμης

Ο Frank Dennemann [8] αναφέρει ότι οι σύγχρονες αρχιτεκτονικές συστημάτων δεν επιτρέπουν την πραγματικά ομοιόμορφη πρόσβαση μνήμης (UMA), παρόλο που αυτά τα συστήματα έχουν σχεδιαστεί ειδικά για αυτόν τον σκοπό. Με απλά λόγια, η ιδέα του παράλληλου υπολογισμού ήταν να υπάρχει μια ομάδα επεξεργαστών που συνεργάζονται για τον υπολογισμό μιας δεδομένης εργασίας, επιταχύνοντας έτσι έναν κλασικό κατά τα άλλα διαδοχικό υπολογισμό.



Όπως εξήγησε ο Frank Dennemann [8], στις αρχές της δεκαετίας του 1970, η ανάγκη για συστήματα που θα μπορούσαν να εξυπηρετήσουν πολλαπλές ταυτόχρονες λειτουργίες χρηστών και υπερβολική παραγωγή δεδομένων έγινε συνηθισμένη με την εισαγωγή συστημάτων σχεσιακής βάσης δεδομένων. Παρά το εντυπωσιακό ποσοστό μη επεξεργαστή, τα συστήματα πολλαπλών επεξεργαστών ήταν καλύτερα εξοπλισμένα για να χειριστούν αυτόν τον φόρτο εργασίας. Για να παρέχει ένα οικονομικά αποδοτικό σύστημα, ο κοινός χώρος διευθύνσεων μνήμης έγινε το επίκεντρο της έρευνας. Από νωρίς, συστήθηκαν συστήματα που χρησιμοποιούν διακόπτη εγκάρσιας γραμμής, ωστόσο με αυτήν την πολυπλοκότητα του σχεδιασμού κλιμακώθηκε παράλληλα με την αύξηση των επεξεργαστών, γεγονός που έκανε το σύστημα με βάση το λεωφορείο πιο ελκυστικό. Οι επεξεργαστές σε ένα σύστημα διαύλου [μπορούν] να έχουν πρόσβαση σε ολόκληρο τον χώρο της μνήμης στέλνοντας αιτήματα στο δίαυλο, έναν πολύ οικονομικό τρόπο για τη χρήση της διαθέσιμης μνήμης όσο το δυνατόν βέλτιστα.

Ωστόσο, τα συστήματα υπολογιστών που βασίζονται σε λεωφορεία συνοδεύονται από μια συμφόρηση-το περιορισμένο εύρος ζώνης που οδηγεί σε προβλήματα κλιμάκωσης. Όσο περισσότερες CPU προστίθενται στο σύστημα, τόσο μικρότερο εύρος ζώνης ανά κόμβο είναι διαθέσιμο. Επιπλέον, όσο περισσότερες CPU προστίθενται, τόσο μεγαλύτερος είναι ο δίαυλος και τόσο μεγαλύτερη η καθυστέρηση ως αποτέλεσμα.

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

Σήμερα, κάθε επεξεργαστής περιέχει πολλούς πυρήνες με μια κοινή μνήμη cip και μια μνήμη εκτός τσιπ και έχει μεταβλητό κόστος πρόσβασης στη μνήμη σε διάφορα μέρη της μνήμης εντός ενός διακομιστή.

Η βελτίωση της αποτελεσματικότητας της πρόσβασης στα δεδομένα είναι ένας από τους κύριους στόχους του σύγχρονου σχεδιασμού της CPU. Κάθε πυρήνας CPU ήταν προικισμένος με μια μικρή προσωρινή μνήμη cache (32 KB) και μια μεγαλύτερη (256 KB) cache επιπέδου 2. Οι διάφοροι πυρήνες θα μοιράζονταν αργότερα μια προσωρινή μνήμη επιπέδου 3 πολλών MB, το μέγεθος της οποίας έχει αυξηθεί σημαντικά με την πάροδο του χρόνου.

Για να αποφύγετε τις παραλείψεις της κρυφής μνήμης - ζητώντας δεδομένα που δεν βρίσκονται στην κρυφή μνήμη - αφιερώνεται πολύς χρόνος έρευνας για την εύρεση του σωστού αριθμού cache της CPU, δομών προσωρινής αποθήκευσης και αντίστοιχων αλγορίθμων. Ανατρέξτε στο [8] για μια πιο λεπτομερή επεξήγηση του πρωτοκόλλου για την προσωρινή αποθήκευση προσωρινής αποθήκευσης [4] και τη συνοχή της προσωρινής μνήμης [3,5], καθώς και τις ιδέες σχεδιασμού πίσω από το NUMA.

Υποστήριξη λογισμικού για το NUMA

Υπάρχουν δύο μέτρα βελτιστοποίησης λογισμικού που μπορεί να βελτιώσουν την απόδοση ενός συστήματος που υποστηρίζει αρχιτεκτονική NUMA - συγγένεια επεξεργαστή και τοποθέτηση δεδομένων. Όπως εξηγείται στο [19], η συγγένεια επεξεργαστή […] επιτρέπει τη σύνδεση και τον αποδέσμευση μιας διαδικασίας ή ενός νήματος σε έναν μόνο επεξεργαστή ή μια σειρά CPU, έτσι ώστε η διαδικασία ή το νήμα να εκτελείται μόνο στις καθορισμένες CPU ή CPU και όχι οποιαδήποτε CPU. Ο όρος τοποθέτηση δεδομένων αναφέρεται σε τροποποιήσεις λογισμικού στις οποίες ο κώδικας και τα δεδομένα διατηρούνται όσο το δυνατόν πιο κοντά στη μνήμη.

Τα διαφορετικά λειτουργικά συστήματα που σχετίζονται με το UNIX και το UNIX υποστηρίζουν το NUMA με τους ακόλουθους τρόπους (η παρακάτω λίστα προέρχεται από το [14]):

  • Υποστήριξη Silicon Graphics IRIX για αρχιτεκτονική ccNUMA πάνω από 1240 CPU με σειρές διακομιστών Origin.
  • Τα Microsoft Windows 7 και Windows Server 2008 R2 πρόσθεσαν υποστήριξη για αρχιτεκτονική NUMA πάνω από 64 λογικούς πυρήνες.
  • Η έκδοση 2.5 του πυρήνα Linux περιείχε ήδη βασική υποστήριξη NUMA, η οποία βελτιώθηκε περαιτέρω σε επόμενες εκδόσεις πυρήνα. Η έκδοση 3.8 του πυρήνα Linux έφερε ένα νέο θεμέλιο NUMA που επέτρεψε την ανάπτυξη πιο αποτελεσματικών πολιτικών NUMA σε μεταγενέστερες εκδόσεις πυρήνα [13]. Η έκδοση 3.13 του πυρήνα του Linux έφερε πολυάριθμες πολιτικές που αποσκοπούν στο να θέσουν μια διαδικασία κοντά στη μνήμη της, μαζί με το χειρισμό περιπτώσεων, όπως η κοινή χρήση σελίδων μνήμης μεταξύ διαδικασιών ή η χρήση διαφανών τεράστιων σελίδων. οι νέες ρυθμίσεις ελέγχου συστήματος επιτρέπουν την ενεργοποίηση ή απενεργοποίηση της ισορροπίας NUMA, καθώς και τη διαμόρφωση διαφόρων παραμέτρων εξισορρόπησης μνήμης NUMA [15].
  • Τόσο η Oracle όσο και η OpenSolaris διαμορφώνουν την αρχιτεκτονική NUMA με την εισαγωγή λογικών ομάδων.
  • Το FreeBSD πρόσθεσε αρχική συγγένεια και διαμόρφωση πολιτικής NUMA στην έκδοση 11.0.

Στο βιβλίο Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai υποδηλώνει ότι η μελέτη της αρχιτεκτονικής NUMA επικεντρώθηκε κυρίως στο υπολογιστικό περιβάλλον υψηλού επιπέδου και πρότεινε τη διαμόρφωση Radix Partitioning (NaRP), η οποία βελτιστοποιεί την απόδοση κοινής μνήμης cache σε κόμβους NUMA για την επιτάχυνση εφαρμογών επιχειρηματικής ευφυΐας. Ως εκ τούτου, το NUMA αντιπροσωπεύει μια μέση βάση μεταξύ συστημάτων κοινής μνήμης (SMP) με λίγους επεξεργαστές [6].

NUMA και Linux

Όπως αναφέρθηκε παραπάνω, ο πυρήνας Linux υποστηρίζει το NUMA από την έκδοση 2.5. Τόσο το Debian GNU/Linux όσο και το Ubuntu προσφέρουν υποστήριξη NUMA για βελτιστοποίηση διαδικασίας με τα δύο πακέτα λογισμικού numactl [16] και numad [17]. Με τη βοήθεια της εντολής numactl, μπορείτε να παραθέσετε το απόθεμα των διαθέσιμων κόμβων NUMA στο σύστημά σας [18]:

# numactl -Hardware
διαθέσιμος:2κόμβοι(0-1)
κόμβος0cpus:0 1 2 3 4 5 6 7 16 17 18 19 είκοσι είκοσι ένα 22 2. 3
κόμβος0Μέγεθος:8157MB
κόμβος0Ελεύθερος:88MB
κόμβος1cpus:8 9 10 έντεκα 12 13 14 δεκαπέντε 24 25 26 27 28 29 30 31
κόμβος1Μέγεθος:8191MB
κόμβος1Ελεύθερος:5176MB
αποστάσεις κόμβων:
κόμβος0 1
0:10 είκοσι
1:είκοσι 10

Το NumaTop είναι ένα χρήσιμο εργαλείο που αναπτύχθηκε από την Intel για την παρακολούθηση της θέσης μνήμης χρόνου εκτέλεσης και την ανάλυση διαδικασιών σε συστήματα NUMA [10,11]. Το εργαλείο μπορεί να εντοπίσει πιθανά σημεία συμφόρησης απόδοσης που σχετίζονται με το NUMA και ως εκ τούτου να βοηθήσει στην εξισορρόπηση εκχωρήσεων μνήμης/CPU για μεγιστοποίηση των δυνατοτήτων ενός συστήματος NUMA. Δείτε [9] για μια πιο λεπτομερή περιγραφή.

Σενάρια χρήσης

Οι υπολογιστές που υποστηρίζουν την τεχνολογία NUMA επιτρέπουν σε όλους τους επεξεργαστές να έχουν άμεση πρόσβαση σε ολόκληρη τη μνήμη - οι CPU το βλέπουν ως έναν ενιαίο, γραμμικό χώρο διευθύνσεων. Αυτό οδηγεί σε πιο αποτελεσματική χρήση του σχήματος διευθύνσεων 64-bit, με αποτέλεσμα ταχύτερη μετακίνηση δεδομένων, λιγότερη αναπαραγωγή δεδομένων και ευκολότερο προγραμματισμό.

Τα συστήματα NUMA είναι αρκετά ελκυστικά για εφαρμογές από τον διακομιστή, όπως η εξόρυξη δεδομένων και τα συστήματα υποστήριξης αποφάσεων. Επιπλέον, η εγγραφή εφαρμογών για παιχνίδια και λογισμικό υψηλής απόδοσης γίνεται πολύ πιο εύκολη με αυτήν την αρχιτεκτονική.

συμπέρασμα

Εν κατακλείδι, η αρχιτεκτονική NUMA αντιμετωπίζει την επεκτασιμότητα, η οποία είναι ένα από τα κύρια πλεονεκτήματά της. Σε έναν επεξεργαστή NUMA, ένας κόμβος θα έχει μεγαλύτερο εύρος ζώνης ή μικρότερο λανθάνοντα χρόνο για να έχει πρόσβαση στη μνήμη στον ίδιο κόμβο (π.χ., η τοπική CPU ζητά πρόσβαση μνήμης ταυτόχρονα με την απομακρυσμένη πρόσβαση · η προτεραιότητα είναι στην τοπική CPU). Αυτό θα βελτιώσει δραματικά την απόδοση της μνήμης εάν τα δεδομένα εντοπιστούν σε συγκεκριμένες διαδικασίες (και συνεπώς επεξεργαστές). Τα μειονεκτήματα είναι το υψηλότερο κόστος μεταφοράς δεδομένων από τον έναν επεξεργαστή στον άλλο. Όσο αυτή η περίπτωση δεν συμβαίνει πολύ συχνά, ένα σύστημα NUMA θα υπερτερεί των συστημάτων με πιο παραδοσιακή αρχιτεκτονική.

Σύνδεσμοι και αναφορές

  1. Σύγκριση NVIDIA Tesla εναντίον Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Σύγκριση NVIDIA DGX-1 εναντίον Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Συνοχή Cache, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Κρυφτό λεωφορείο, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Πρωτόκολλα συνοχής Cache σε συστήματα πολλαπλών επεξεργαστών, Geeks για geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Επιστήμη και τεχνολογία υπολογιστών - Πρακτικά του Διεθνούς Συνεδρίου (CST2016), Ning Cai (Επιμ.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet και Marco Cesati: Κατανόηση της αρχιτεκτονικής NUMA στην κατανόηση του πυρήνα του Linux, 3η έκδοση, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Μέρος 1: Από το UMA στο NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: Ένα εργαλείο παρακολούθησης συστήματος NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Πακέτο numatop για Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Understanding Non-Uniform Memory Access/Architectures (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux Kernel News for Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Μη ομοιόμορφη πρόσβαση στη μνήμη (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Τεκμηρίωση διαχείρισης μνήμης Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Πακέτο numactl για Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Πακέτο numad για Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Πώς να βρείτε εάν η διαμόρφωση NUMA είναι ενεργοποιημένη ή απενεργοποιημένη;, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Συγγένεια επεξεργαστή, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Σας ευχαριστώ

Οι συγγραφείς θα ήθελαν να ευχαριστήσουν τον Gerold Rupprecht για την υποστήριξή του κατά την προετοιμασία αυτού του άρθρου.

Σχετικά με τους Συγγραφείς

Η Plaxedes Nehanda είναι ένα πολύπλευρο, αυτοδύναμο και ευπροσάρμοστο άτομο που φοράει πολλά καπέλα, μεταξύ αυτών, έναν προγραμματιστή εκδηλώσεων, έναν εικονικό βοηθό, έναν μεταγραφέα, καθώς και έναν άπληστο ερευνητή, με έδρα το Γιοχάνεσμπουργκ, στη Νότια Αφρική.

Ο Πρίγκιπας Κ. Νεχάντα είναι Μηχανικός Οργάνων και Ελέγχου (Μετρολογίας) στο Paeflow Metering στη Χαράρε της Ζιμπάμπουε.

Ο Frank Hofmann εργάζεται στο δρόμο-κατά προτίμηση από το Βερολίνο (Γερμανία), τη Γενεύη (Ελβετία) και το Κέιπ Τάουν (Νότια Αφρική)-ως προγραμματιστής, εκπαιδευτής και συγγραφέας περιοδικών όπως το Linux-User και το Linux Magazine. Είναι επίσης συν-συγγραφέας του βιβλίου διαχείρισης πακέτων Debian ( http://www.dpmb.org ).