Γιατί η VM σας δεν έχει swap
Το swap αφήνει ένα μηχάνημα να προσποιείται ότι έχει περισσότερη μνήμη από όση έχει. Σε enterprise flash αυτή η προσποίηση κοστίζει φθορά storage και έναν γκρεμό latency, οπότε διαστασιολογούμε τη RAM αντί γι' αυτό.
Σε αυτό το άρθρο 5 ενότητες
- Η RAM απαντά σε περίπου 100 nanoseconds. Το γρήγορο flash απαντά σε περίπου 100 microseconds. Ένας φόρτος εργασίας που πέφτει σε swap τρέχει πάνω σε μνήμη περίπου χίλιες φορές πιο αργή.
- Το swapping μετατρέπει μια έλλειψη RAM σε φθορά storage και γκρεμό latency. Ο φόρτος αποτυγχάνει πιο αργά και πιο μπερδεμένα αντί να αποτυγχάνει καθαρά.
- Εμείς διαστασιολογούμε τη RAM αντί γι' αυτό. Το Sizing Desk ζητά την πραγματική έξοδο του free -m σας πριν προτείνει οτιδήποτε.
Οι εικονικές μηχανές που χτίζουμε παραδίδονται χωρίς swap. Όταν μία ξεμένει από μνήμη, η αποτυχία είναι άμεση και ορατή, και η λύση είναι μια συζήτηση για RAM. Σε ένα φύλλο προδιαγραφών αυτό διαβάζεται σαν παράλειψη, οπότε να το σκεπτικό πλήρως. Τίποτα από αυτά δεν εξαρτάται από το hardware μας. Μπορείτε να εφαρμόσετε το επιχείρημα σε οποιαδήποτε VM τρέχετε οπουδήποτε.
Το swap υπάρχει για να αφήνει ένα μηχάνημα να τρέχει πέρα από τη φυσική του μνήμη
Το swap είναι η βαλβίδα υπερχείλισης του kernel. Όταν η φυσική μνήμη λιγοστεύει, μετακινεί τις σελίδες που κρίνει πιο κρύες στον δίσκο και δίνει την ελευθερωμένη RAM σε όποιον ζητάει. Το μηχάνημα μπορεί να αναφέρει περισσότερη μνήμη από όση κρατά το πυρίτιο, κάθε allocation μπορεί να πετύχει, και η αλήθεια φτάνει αργότερα, ως latency, όποτε μια διεργασία αγγίζει μια σελίδα που τελικά ζούσε στον δίσκο.
Αυτή η ανταλλαγή είχε νόημα όταν εφευρέθηκε. Η RAM ήταν σπάνια και ακριβή, τα μηχανήματα τα μοιράζονταν πολλές εργασίες, και μια batch εργασία που σερνόταν όλη νύχτα ήταν καλύτερη από μια batch εργασία που πέθαινε. Κάθε κομμάτι αυτού του πλαισίου έχει από τότε αντιστραφεί: η RAM είναι η φθηνότερη που υπήρξε ποτέ ανά gigabyte, το μηχάνημα είναι δικό σας και μόνο, και οι φόρτοι είναι διαδραστικές υπηρεσίες όπου μια δεκαπλάσια εκτροπή latency δεν ξεχωρίζει από διακοπή. Η βαλβίδα υπερχείλισης έμεινε στις προεπιλογές έτσι κι αλλιώς, γιατί οι προεπιλογές ζουν περισσότερο από τους λόγους τους.
Το να πέσετε έξω από τη RAM κοστίζει τρεις τάξεις μεγέθους
Η υπόθεση εναντίον του swap είναι αριθμητική πριν γίνει φιλοσοφία. Η μνήμη και το storage κάθονται σε διαφορετικούς ορόφους του κτιρίου του latency, και η σκάλα ανάμεσά τους είναι μακριά.
- CACHE ΤΗΣ CPU
- περίπου ένα nanosecond
- RAM
- περίπου 100 nanoseconds
- ΓΡΗΓΟΡΟ FLASH
- περίπου 100 microseconds, χίλιες φορές πιο αργό από τη RAM
- ΕΝΑ PAGE FAULT ΣΕ SWAP
- ολόκληρο το ταξίδι στο storage, συν αναμονή ουράς, στην πιο καυτή διαδρομή που έχει ο φόρτος σας
Οι ακριβείς αριθμοί διαφέρουν ανά hardware. Τα χάσματα ανάμεσα στους ορόφους όχι. Υπό πραγματική πίεση μνήμης το μηχάνημα παίρνει αυτή τη σκάλα συνεχώς: ο kernel εκδιώκει σελίδες, ο φόρτος τις ξαναφέρνει αμέσως, και η CPU ξοδεύει τους κύκλους της περιμένοντας το storage. Το load average ανεβαίνει ενώ η χρήσιμη απόδοση καταρρέει.
~0,1 έως 1 ms
100 ns
~10.000×
Το swap καίει enterprise flash για να κρύψει ένα λάθος διαστασιολόγησης
Στους περιστρεφόμενους δίσκους, το swap ήταν απλώς αργό. Στο flash είναι και διαβρωτικό. Η κίνηση swap είναι το χειρότερο μοτίβο που μπορείτε να δώσετε σε flash: μια συνεχής ροή μικρών τυχαίων εγγραφών που υπάρχουν χωρίς κανέναν λόγο εκτός από το ότι το μηχάνημα έχει λίγη RAM. Καθεμία από αυτές τις εγγραφές γερνά ένα κελί για να διατηρήσει μια ψευδαίσθηση.
Και ο φόρτος δεν παίρνει τίποτα πίσω για τη φθορά. Κουτσαίνει με ρυθμό storage μέχρι να τελειώσει η πίεση ή να επέμβει κάποιος. Η συστοιχία κάτω από τη VM σας εδώ είναι HPE 3PAR all-flash, και η δουλειά της είναι να σερβίρει τα δεδομένα σας με ταχύτητα. Το να ξοδεύεται η αντοχή εγγραφών της ως ψεύτικη μνήμη είναι κακή ανταλλαγή σε οποιαδήποτε τιμή, γι' αυτό προτιμάμε να κάνουμε τη συζήτηση της διαστασιολόγησης από την αρχή παρά να την καλύπτουμε με paging.
Χωρίς swap, η εξάντληση μνήμης παράγει μια γραμμή log αντί για μυστήριο
Το ισχυρότερο επιχείρημα είναι διαγνωστικό, και όποιος έχει κυνηγήσει μια αργή εβδομάδα μέσα σε ένα stack παρακολούθησης το ξέρει ήδη. Με swap, το να τελειώνει η μνήμη μοιάζει με τα πάντα εκτός από το να τελειώνει η μνήμη. Το latency ανεβαίνει σε κάθε υπηρεσία ταυτόχρονα, κανένα σφάλμα δεν εμφανίζεται σε κανένα log, και τα dashboards δείχνουν παντού όπου γίνεται αισθητή η αναμονή, που συνήθως είναι η βάση δεδομένων και το storage. Οι ομάδες χάνουν μέρες σε αυτό το κυνήγι, και το swap το κατασκευάζει σε ένα μόνο μηχάνημα, συστηματικά, από σχεδιασμό.
- Το latency ανεβαίνει σε κάθε υπηρεσία ταυτόχρονα, χωρίς σφάλμα σε κανένα log
- Τα dashboards κατηγορούν τη βάση, μετά το storage, μετά το δίκτυο
- Η συστοιχία απορροφά μια ροή μικρών τυχαίων εγγραφών που η μόνη τους δουλειά είναι να κρύβουν την έλλειψη
- Η διάγνωση φτάνει μέρες αργότερα, αφού κάποιος συσχετίσει τα γραφήματα
- Ο kernel σκοτώνει τον μεγαλύτερο παραβάτη και τον ονομάζει στο log
- Η αποτυχία έχει χρονοσήμανση, όνομα διεργασίας και σύνολο μνήμης
- Η συστοιχία ξοδεύει τις εγγραφές της σε πραγματικά δεδομένα
- Η λύση είναι μια συζήτηση αλλαγής μεγέθους την ίδια μέρα
Ένα γράφημα μνήμης σε μηχάνημα χωρίς swap λέει την αλήθεια μέχρι την άκρη.
Διαστασιολογούμε τη RAM ειλικρινά και ζητάμε το πραγματικό σας free -m
Η ειλικρινής λύση για μια έλλειψη μνήμης είναι η ίδια από τότε που εφευρέθηκε το paging: περισσότερη RAM, ή μικρότερο working set. Εκεί λοιπόν ξοδεύουμε την προσπάθεια. Το Sizing Desk ζητά την πραγματική έξοδο του free -m από το τρέχον μηχάνημά σας πριν προτείνει οτιδήποτε, γιατί η στήλη available αυτής της εντολής κλείνει συζητήσεις που τα επίθετα δεν θα κλείσουν ποτέ, και η ίδια ανάγνωση που αφαιρεί την ανάγκη για swap συνήθως μικραίνει και την προσφορά.
Η πλήρης μέθοδος, με δουλεμένα παραδείγματα για κάθε αριθμό που ζητάμε, βρίσκεται στο πώς να διαστασιολογήσετε έναν server. Σε hardware που μας ανήκει το περιθώριο κάθεται ήδη μέσα στο μηχάνημα που πληρώσατε, οπότε η δέσμευσή του δεν κοστίζει τίποτα επιπλέον στην αιχμή σας, πράγμα που αφαιρεί την τελευταία οικονομική δικαιολογία για να αντιμετωπίζεται το storage ως RAM υπερχείλισης.
Ευθείες απαντήσεις
Δεν χρειάζεται ο kernel λίγο swap για να δουλεύει καλά;+
Ο kernel μπορεί να χρησιμοποιήσει swap για να εκδιώξει πραγματικά κρύες σελίδες και να δώσει την ανακτημένη RAM στο cache του δίσκου, και σε ένα χρόνια στενό μηχάνημα αυτό βοηθά οριακά. Το οριακό είναι το πρόβλημα. Αγοράζει λίγα ποσοστά ενεργής μνήμης ενώ κρύβει αν το μηχάνημα είναι καν αρκετά μεγάλο, και θολώνει κάθε γράφημα μνήμης στο οποίο αργότερα θα βασιστείτε. Σε ένα σωστά διαστασιολογημένο μηχάνημα το κέρδος από τις κρύες σελίδες στρογγυλεύει στο μηδέν, και η διαγνωστική καθαρότητα ενός σκληρού ορίου μνήμης αξίζει πολύ περισσότερο στις 3 το πρωί.
Πώς βρίσκω πόση RAM χρησιμοποιώ πραγματικά;+
Τρέξτε free -m σε μια πραγματική αιχμή και διαβάστε τη στήλη available. Η πλήρης μέθοδος, με δουλεμένα παραδείγματα για κάθε αριθμό, βρίσκεται στο άρθρο μας για τη διαστασιολόγηση, πώς να διαστασιολογήσετε έναν server. Αν αυτή η στήλη λέει ότι είστε πραγματικά στενά, η απάντηση είναι περισσότερη RAM, και θα το πούμε.
Το «χωρίς swap» είναι μια μικρή απόφαση κατάντη μεγαλύτερων: διαστασιολογήστε τα μηχανήματα με πραγματικούς αριθμούς αντί για τιμολόγια, και βάλτε σοβαρό hardware από κάτω τους ώστε οι αριθμοί να κρατάνε σε μια κακή νύχτα. Η συζήτηση για RAM είναι φθηνότερη από το μυστήριο που αποτρέπει.
Διαστασιολογήστε τη RAM ειλικρινά
Το Sizing Desk ξεκινά από τους πραγματικούς αριθμούς του μηχανήματός σας και προτείνει μια διαμόρφωση από τα πραγματικά μας δομικά στοιχεία. Όταν οι αριθμοί σας λένε λιγότερα, σας διαστασιολογεί προς τα κάτω.
Ανοίξτε το Sizing DeskΦτάσατε στο τέλος.
Βάλτε την ανάγνωση σε εφαρμογή
Τι τρέχετε;
Πείτε μας για τον φόρτο εργασίας, την κίνηση και τις απαιτήσεις ανάκαμψης. Ξεκινήστε από το εργαλείο διαμόρφωσης server ή συζητήστε τις λεπτομέρειες με έναν μηχανικό.
Γραμμένο από τους μηχανικούς που χτίζουν και λειτουργούν την υποδομή που περιγράφει.Μιλήστε με έναν μηχανικό
