Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση

Αυτή την άνοιξη έχουμε ήδη συζητήσει ορισμένα εισαγωγικά θέματα, για παράδειγμα, πώς να ελέγξετε την ταχύτητα των δίσκων σας и τι είναι το RAID. Στο δεύτερο από αυτά, υποσχεθήκαμε μάλιστα να συνεχίσουμε τη μελέτη της απόδοσης διαφόρων τοπολογιών πολλαπλών δίσκων στο ZFS. Αυτό είναι το σύστημα αρχείων επόμενης γενιάς που εφαρμόζεται τώρα παντού: από Apple να Ubuntu.

Λοιπόν, σήμερα είναι η καλύτερη μέρα για να εξοικειωθείτε με το ZFS, περίεργους αναγνώστες. Απλώς ξέρετε ότι κατά την ταπεινή γνώμη του προγραμματιστή του OpenZFS Matt Ahrens, "είναι πραγματικά δύσκολο".

Αλλά προτού φτάσουμε στους αριθμούς - και θα κάνουν, υπόσχομαι - για όλες τις επιλογές για μια διαμόρφωση ZFS οκτώ δίσκων, πρέπει να μιλήσουμε για как Γενικά, το ZFS αποθηκεύει δεδομένα στο δίσκο.

Zpool, vdev και συσκευή

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Αυτό το πλήρες διάγραμμα συγκέντρωσης περιλαμβάνει τρία βοηθητικά vdevs, ένα από κάθε κατηγορία και τέσσερα για το RAIDz2

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Συνήθως δεν υπάρχει λόγος να δημιουργήσετε μια ομάδα αταίριαστων τύπων και μεγεθών vdev - αλλά τίποτα δεν σας εμποδίζει να το κάνετε εάν το θέλετε.

Για να κατανοήσετε πραγματικά το σύστημα αρχείων ZFS, πρέπει να ρίξετε μια προσεκτική ματιά στην πραγματική του δομή. Πρώτον, το ZFS ενοποιεί τα παραδοσιακά επίπεδα διαχείρισης όγκου και συστήματος αρχείων. Δεύτερον, χρησιμοποιεί έναν συναλλακτικό μηχανισμό αντιγραφής σε εγγραφή. Αυτά τα χαρακτηριστικά σημαίνουν ότι το σύστημα είναι δομικά πολύ διαφορετικό από τα συμβατικά συστήματα αρχείων και τις συστοιχίες RAID. Το πρώτο σύνολο βασικών δομικών στοιχείων που πρέπει να κατανοήσετε είναι η πισίνα αποθήκευσης (zpool), η εικονική συσκευή (vdev) και η πραγματική συσκευή (συσκευή).

zpool

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

Ο πλεονασμός του ZFS είναι σε επίπεδο εικονικής συσκευής, όχι σε επίπεδο συγκέντρωσης. Δεν υπάρχει απολύτως κανένας πλεονασμός σε επίπεδο πισίνας - εάν χαθεί κάποια μονάδα δίσκου vdev ή ειδικό vdev, τότε θα χαθεί και ολόκληρη η πισίνα μαζί της.

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

Υπάρχει μια κοινή παρανόηση ότι οι "λωρίδες δεδομένων" του ZFS είναι γραμμένες σε ολόκληρη την ομάδα. Αυτό δεν είναι αληθινό. Το Zpool δεν είναι καθόλου αστείο RAID0, είναι μάλλον αστείο JBOD με έναν πολύπλοκο μεταβλητό μηχανισμό διανομής.

Ως επί το πλείστον, οι καταχωρήσεις κατανέμονται μεταξύ των διαθέσιμων εικονικών συσκευών ανάλογα με τον διαθέσιμο ελεύθερο χώρο, οπότε θεωρητικά θα συμπληρωθούν όλες ταυτόχρονα. Σε νεότερες εκδόσεις του ZFS, λαμβάνεται υπόψη η τρέχουσα χρήση (χρήση) vdev - εάν μια εικονική συσκευή είναι σημαντικά πιο απασχολημένη από μια άλλη (για παράδειγμα, λόγω φόρτωσης ανάγνωσης), θα παραλειφθεί προσωρινά για εγγραφή, παρόλο που έχει το υψηλότερο δωρεάν αναλογία χώρου.

Ο μηχανισμός ανίχνευσης χρήσης που είναι ενσωματωμένος στις σύγχρονες μεθόδους κατανομής εγγραφής ZFS μπορεί να μειώσει την καθυστέρηση και να αυξήσει την απόδοση κατά τη διάρκεια περιόδων ασυνήθιστα υψηλού φορτίου - αλλά δεν το κάνει λευκή κάρτα για ακούσια ανάμειξη αργών σκληρών δίσκων και γρήγορων SSD σε μία ομάδα. Μια τέτοια άνιση πισίνα θα εξακολουθεί να λειτουργεί με την ταχύτητα της πιο αργής συσκευής, δηλαδή σαν να αποτελείται εξ ολοκλήρου από τέτοιες συσκευές.

vdev

Κάθε χώρος αποθήκευσης αποτελείται από μία ή περισσότερες εικονικές συσκευές (εικονική συσκευή, vdev). Με τη σειρά του, κάθε vdev περιέχει μία ή περισσότερες πραγματικές συσκευές. Οι περισσότερες εικονικές συσκευές χρησιμοποιούνται για απλή αποθήκευση δεδομένων, αλλά υπάρχουν αρκετές βοηθητικές κλάσεις vdev, συμπεριλαμβανομένων των CACHE, LOG και SPECIAL. Καθένας από αυτούς τους τύπους vdev μπορεί να έχει μία από τις πέντε τοπολογίες: μεμονωμένη συσκευή (μονή συσκευή), RAIDz1, RAIDz2, RAIDz3 ή mirror (mirror).

Τα RAIDz1, RAIDz2 και RAIDz3 είναι ειδικές ποικιλίες αυτού που οι παλιοί θα αποκαλούσαν RAID διπλής (διαγώνιας) ισοτιμίας. Τα 1, 2 και 3 αναφέρονται στο πόσα μπλοκ ισοτιμίας έχουν εκχωρηθεί για κάθε λωρίδα δεδομένων. Αντί για ξεχωριστούς δίσκους για ισοτιμία, οι εικονικές συσκευές RAIDz κατανέμουν αυτήν την ισοτιμία ημι-ομοιόμορφα στους δίσκους. Ένας πίνακας RAIDz μπορεί να χάσει όσους δίσκους έχει μπλοκ ισοτιμίας. αν χάσει άλλο ένα, θα κολλήσει και θα πάρει μαζί του την πισίνα αποθήκευσης.

Σε αντικατοπτρισμένες εικονικές συσκευές (mirror vdev), κάθε μπλοκ αποθηκεύεται σε κάθε συσκευή στο vdev. Αν και οι καθρέφτες δύο πλάτους είναι οι πιο συνηθισμένοι, οποιοσδήποτε αυθαίρετος αριθμός συσκευών μπορεί να βρίσκεται σε έναν καθρέφτη - οι τριπλοί χρησιμοποιούνται συχνά σε μεγάλες εγκαταστάσεις για βελτιωμένη απόδοση ανάγνωσης και ανοχή σφαλμάτων. Ένας καθρέφτης vdev μπορεί να επιβιώσει σε οποιαδήποτε αποτυχία, εφόσον τουλάχιστον μία συσκευή στο vdev συνεχίζει να λειτουργεί.

Τα μεμονωμένα vdev είναι εγγενώς επικίνδυνα. Μια τέτοια εικονική συσκευή δεν θα επιβιώσει από μία μόνο αποτυχία - και αν χρησιμοποιηθεί ως αποθήκευση ή ως ειδικό vdev, τότε η αποτυχία της θα οδηγήσει στην καταστροφή ολόκληρης της πισίνας. Να είστε πολύ, πολύ προσεκτικοί εδώ.

Οι CACHE, LOG και SPECIAL VA μπορούν να δημιουργηθούν χρησιμοποιώντας οποιαδήποτε από τις παραπάνω τοπολογίες - αλλά να θυμάστε ότι η απώλεια μιας SPECIAL VA σημαίνει απώλεια της ομάδας, επομένως συνιστάται ανεπιφύλακτα μια περιττή τοπολογία.

συσκευή

Αυτός είναι ίσως ο πιο εύκολος στην κατανόηση όρος στο ZFS - είναι κυριολεκτικά μια συσκευή τυχαίας πρόσβασης μπλοκ. Θυμηθείτε ότι οι εικονικές συσκευές αποτελούνται από μεμονωμένες συσκευές, ενώ μια πισίνα αποτελείται από εικονικές συσκευές.

Οι δίσκοι - είτε μαγνητικές είτε στερεάς κατάστασης - είναι οι πιο κοινές συσκευές μπλοκ που χρησιμοποιούνται ως δομικά στοιχεία του vdev. Ωστόσο, οποιαδήποτε συσκευή με περιγραφέα στο /dev θα κάνει, επομένως ολόκληροι πίνακες RAID υλικού μπορούν να χρησιμοποιηθούν ως ξεχωριστές συσκευές.

Ένα απλό ακατέργαστο αρχείο είναι μια από τις πιο σημαντικές εναλλακτικές συσκευές μπλοκ από τις οποίες μπορεί να κατασκευαστεί ένα vdev. Δοκιμαστικές πισίνες από αραιά αρχεία είναι ένας πολύ εύχρηστος τρόπος για να ελέγξετε τις εντολές πισίνας και να δείτε πόσος χώρος είναι διαθέσιμος σε μια πισίνα ή εικονική συσκευή μιας δεδομένης τοπολογίας.

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Μπορείτε να δημιουργήσετε μια ομάδα δοκιμών από αραιά αρχεία σε λίγα δευτερόλεπτα - αλλά μην ξεχάσετε να διαγράψετε ολόκληρη τη συγκέντρωση και τα στοιχεία της στη συνέχεια

Ας υποθέσουμε ότι θέλετε να τοποθετήσετε έναν διακομιστή σε οκτώ δίσκους και σκοπεύετε να χρησιμοποιήσετε δίσκους 10 TB (~9300 GiB) - αλλά δεν είστε σίγουροι ποια τοπολογία ταιριάζει καλύτερα στις ανάγκες σας. Στο παραπάνω παράδειγμα, χτίζουμε μια ομάδα δοκιμών από αραιά αρχεία σε δευτερόλεπτα - και τώρα γνωρίζουμε ότι ένα RAIDz2 vdev οκτώ δίσκων 10 TB παρέχει 50 TiB χρησιμοποιήσιμης χωρητικότητας.

Μια άλλη ειδική κατηγορία συσκευών είναι η SPARE (εφεδρική). Οι συσκευές Hot-swap, σε αντίθεση με τις κανονικές συσκευές, ανήκουν σε ολόκληρη την πισίνα και όχι σε μία εικονική συσκευή. Εάν ένα vdev στο pool αποτύχει και μια εφεδρική συσκευή είναι συνδεδεμένη στην πισίνα και είναι διαθέσιμη, τότε θα ενταχθεί αυτόματα στο επηρεαζόμενο vdev.

Μετά τη σύνδεση στο επηρεαζόμενο vdev, η εφεδρική συσκευή αρχίζει να λαμβάνει αντίγραφα ή ανακατασκευές των δεδομένων που θα πρέπει να υπάρχουν στη συσκευή που λείπει. Στο παραδοσιακό RAID αυτό ονομάζεται rebuilding, ενώ στο ZFS ονομάζεται resilvering.

Είναι σημαντικό να σημειωθεί ότι οι εφεδρικές συσκευές δεν αντικαθιστούν μόνιμα τις συσκευές που έχουν αποτύχει. Αυτή είναι μόνο μια προσωρινή αντικατάσταση για τη μείωση του χρόνου υποβάθμισης του vdev. Αφού ο διαχειριστής αντικαταστήσει το αποτυχημένο vdev, ο πλεονασμός αποκαθίσταται σε αυτήν τη μόνιμη συσκευή και το SPARE αποσυνδέεται από το vdev και επιστρέφει στη λειτουργία του ως εφεδρικό για ολόκληρη την πισίνα.

Σύνολα δεδομένων, μπλοκ και τομείς

Το επόμενο σύνολο δομικών στοιχείων που πρέπει να κατανοήσουμε στο ταξίδι μας στο ZFS αφορά λιγότερο το υλικό και περισσότερο τον τρόπο οργάνωσης και αποθήκευσης των ίδιων των δεδομένων. Παρακάμπτουμε μερικά επίπεδα εδώ - όπως το metaslab - για να μην μπερδεύουμε τις λεπτομέρειες διατηρώντας παράλληλα την κατανόηση της συνολικής δομής.

Σύνολο δεδομένων (σύνολο δεδομένων)

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Όταν δημιουργούμε για πρώτη φορά ένα σύνολο δεδομένων, εμφανίζει όλο τον διαθέσιμο χώρο πισίνας. Στη συνέχεια, ορίζουμε το όριο - και αλλάζουμε το σημείο προσάρτησης. Μαγεία!

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Το Zvol είναι ως επί το πλείστον απλώς ένα σύνολο δεδομένων που αφαιρείται από το επίπεδο συστήματος αρχείων του, το οποίο αντικαθιστούμε εδώ με ένα απολύτως κανονικό σύστημα αρχείων ext4.

Ένα σύνολο δεδομένων ZFS είναι περίπου το ίδιο με ένα τυπικό σύστημα αρχείων. Όπως ένα κανονικό σύστημα αρχείων, με την πρώτη ματιά μοιάζει με "απλώς ένας άλλος φάκελος". Αλλά ακριβώς όπως τα κανονικά συστήματα αρχείων με δυνατότητα προσάρτησης, κάθε σύνολο δεδομένων ZFS έχει το δικό του σύνολο βασικών ιδιοτήτων.

Πρώτα απ 'όλα, ένα σύνολο δεδομένων μπορεί να έχει ένα εκχωρημένο όριο. Εάν έχει οριστεί zfs set quota=100G poolname/datasetname, τότε δεν θα μπορείτε να γράψετε στον προσαρτημένο φάκελο /poolname/datasetname περισσότερα από 100 GiB.

Παρατηρήστε την παρουσία - και την απουσία - των καθέτων στην αρχή κάθε γραμμής; Κάθε σύνολο δεδομένων έχει τη δική του θέση τόσο στην ιεραρχία ZFS όσο και στην ιεραρχία προσάρτησης συστήματος. Δεν υπάρχει η πρώτη κάθετο στην ιεραρχία του ZFS - ξεκινάτε με το όνομα της πισίνας και στη συνέχεια τη διαδρομή από το ένα σύνολο δεδομένων στο άλλο. Για παράδειγμα, pool/parent/child για ένα σύνολο δεδομένων με όνομα child κάτω από το γονικό σύνολο δεδομένων parent σε μια πισίνα με δημιουργικό όνομα pool.

Από προεπιλογή, το σημείο προσάρτησης του συνόλου δεδομένων θα είναι ισοδύναμο με το όνομά του στην ιεραρχία ZFS, με μια πρώτη κάθετο - η ομάδα που ονομάζεται pool τοποθετημένο ως /pool, σύνολο δεδομένων parent τοποθετημένο μέσα /pool/parentκαι το θυγατρικό σύνολο δεδομένων child τοποθετημένο μέσα /pool/parent/child. Ωστόσο, το σημείο προσάρτησης συστήματος του συνόλου δεδομένων μπορεί να αλλάξει.

Αν διευκρινίσουμε zfs set mountpoint=/lol pool/parent/child, μετά το σύνολο δεδομένων pool/parent/child τοποθετείται στο σύστημα ως /lol.

Εκτός από τα σύνολα δεδομένων, θα πρέπει να αναφέρουμε τόμους (zvols). Ένας τόμος είναι περίπου ο ίδιος με ένα σύνολο δεδομένων, με τη διαφορά ότι στην πραγματικότητα δεν έχει σύστημα αρχείων—είναι απλώς μια συσκευή μπλοκ. Μπορείτε, για παράδειγμα, να δημιουργήσετε zvol Με όνομα mypool/myzvol, στη συνέχεια μορφοποιήστε το με ένα σύστημα αρχείων ext4 και, στη συνέχεια, προσαρτήστε αυτό το σύστημα αρχείων - τώρα έχετε ένα σύστημα αρχείων ext4, αλλά με όλες τις δυνατότητες ασφαλείας του ZFS! Αυτό μπορεί να φαίνεται ανόητο σε ένα μόνο μηχάνημα, αλλά είναι πολύ πιο λογικό ως backend κατά την εξαγωγή μιας συσκευής iSCSI.

Μπλοκ

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Το αρχείο αντιπροσωπεύεται από ένα ή περισσότερα μπλοκ. Κάθε μπλοκ αποθηκεύεται σε μία εικονική συσκευή. Το μέγεθος του μπλοκ είναι συνήθως ίσο με την παράμετρο μέγεθος αρχείου, αλλά μπορεί να μειωθεί σε 2^βάρδιαεάν περιέχει μεταδεδομένα ή μικρό αρχείο.

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Εμείς πραγματικά πραγματικά δεν αστειεύεστε για την τεράστια ποινή απόδοσης εάν ορίσετε πολύ μικρή αλλαγή

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

Εκτός εάν ορίζεται διαφορετικά, το τρέχον προεπιλεγμένο μέγεθος εγγραφής είναι 128 KiB. Είναι ένα είδος δύσκολης αντιστάθμισης όπου η απόδοση δεν είναι τέλεια, αλλά δεν είναι ούτε τρομερό στις περισσότερες περιπτώσεις. Recordsize μπορεί να ρυθμιστεί σε οποιαδήποτε τιμή από 4K έως 1M (με προηγμένες ρυθμίσεις recordsize μπορείτε να εγκαταστήσετε ακόμη περισσότερα, αλλά σπάνια είναι καλή ιδέα).

Οποιοδήποτε μπλοκ αναφέρεται στα δεδομένα ενός μόνο αρχείου - δεν μπορείτε να στριμώξετε δύο διαφορετικά αρχεία σε ένα μπλοκ. Κάθε αρχείο αποτελείται από ένα ή περισσότερα μπλοκ, ανάλογα με το μέγεθος. Εάν το μέγεθος του αρχείου είναι μικρότερο από το μέγεθος της εγγραφής, θα αποθηκευτεί σε μικρότερο μέγεθος μπλοκ - για παράδειγμα, ένα μπλοκ με αρχείο 2 KiB θα καταλαμβάνει μόνο έναν τομέα 4 KiB στο δίσκο.

Εάν το αρχείο είναι αρκετά μεγάλο και απαιτεί πολλά μπλοκ, τότε όλες οι εγγραφές με αυτό το αρχείο θα έχουν μέγεθος recordsize - συμπεριλαμβανομένης της τελευταίας καταχώρισης, το κύριο μέρος της οποίας μπορεί να είναι αχρησιμοποίητος χώρος.

Τα zvols δεν έχουν ιδιοκτησία recordsize — αντίθετα έχουν ισοδύναμη ιδιότητα volblocksize.

Τομείς

Το τελευταίο, πιο βασικό δομικό στοιχείο είναι ο τομέας. Είναι η μικρότερη φυσική μονάδα που μπορεί να εγγραφεί ή να διαβαστεί από την υποκείμενη συσκευή. Για αρκετές δεκαετίες, οι περισσότεροι δίσκοι χρησιμοποιούσαν τομείς 512 byte. Πρόσφατα, οι περισσότεροι δίσκοι έχουν ρυθμιστεί σε τομείς 4 KiB και ορισμένοι - ειδικά SSD - έχουν τομείς 8 KiB ή και περισσότερους.

Το σύστημα ZFS έχει μια ιδιότητα που σας επιτρέπει να ορίσετε μη αυτόματα το μέγεθος του τομέα. Αυτή η ιδιοκτησία ashift. Κάπως μπερδεμένα, η μετατόπιση είναι δύναμη δύο. Για παράδειγμα, ashift=9 σημαίνει μέγεθος τομέα 2^9 ή 512 byte.

Το ZFS ζητά από το λειτουργικό σύστημα λεπτομερείς πληροφορίες σχετικά με κάθε μπλοκ συσκευή όταν προστίθεται σε ένα νέο vdev και θεωρητικά εγκαθιστά αυτόματα το ashift σωστά με βάση αυτές τις πληροφορίες. Δυστυχώς, πολλές μονάδες δίσκου λένε ψέματα σχετικά με το μέγεθος του τομέα τους, προκειμένου να διατηρηθεί η συμβατότητα με τα Windows XP (τα οποία δεν μπορούσαν να κατανοήσουν μονάδες δίσκου με άλλα μεγέθη τομέα).

Αυτό σημαίνει ότι ο διαχειριστής του ZFS συνιστάται να γνωρίζει το πραγματικό μέγεθος τομέα των συσκευών του και να ορίζει χειροκίνητα ashift. Εάν η μετατόπιση είναι πολύ χαμηλή, τότε ο αριθμός των λειτουργιών ανάγνωσης/εγγραφής αυξάνεται αστρονομικά. Έτσι, γράφοντας "τομείς" 512 byte σε έναν πραγματικό τομέα 4 KiB σημαίνει ότι πρέπει να γράψετε τον πρώτο "τομέα", μετά να διαβάσετε τον τομέα των 4 KiB, να τον τροποποιήσετε με έναν δεύτερο "τομέα" 512 byte, να τον γράψετε πίσω στον νέο 4 KiB τομέα και ούτω καθεξής για κάθε καταχώρηση.

Στον πραγματικό κόσμο, μια τέτοια ποινή πλήττει τους Samsung EVO SSD, για τους οποίους ashift=13, αλλά αυτοί οι SSD βρίσκονται στο μέγεθος του τομέα τους και επομένως η προεπιλογή έχει οριστεί σε ashift=9. Εάν ένας έμπειρος διαχειριστής συστήματος δεν αλλάξει αυτήν τη ρύθμιση, τότε αυτός ο SSD λειτουργεί βραδύτερη συμβατικός μαγνητικός σκληρός δίσκος.

Για σύγκριση, για πολύ μεγάλο μέγεθος ashift πρακτικά δεν υπάρχει ποινή. Δεν υπάρχει πραγματική ποινή απόδοσης και η αύξηση του αχρησιμοποίητου χώρου είναι απειροελάχιστη (ή μηδενική με ενεργοποιημένη τη συμπίεση). Επομένως, συνιστούμε ανεπιφύλακτα να εγκαταστήσετε ακόμη και εκείνες τις μονάδες που χρησιμοποιούν τομείς 512 byte ashift=12 ή ashift=13να αντιμετωπίσει το μέλλον με αυτοπεποίθηση.

Ιδιοκτησία ashift ορίζεται για κάθε εικονική συσκευή vdev και όχι για την πισίνα, όπως λανθασμένα νομίζουν πολλοί - και δεν αλλάζει μετά την εγκατάσταση. Αν χτυπήσεις κατά λάθος ashift Όταν προσθέτετε ένα νέο vdev σε μια πισίνα, έχετε μολύνει ανεπανόρθωτα αυτήν την πισίνα με μια συσκευή χαμηλής απόδοσης και συνήθως δεν υπάρχει άλλη επιλογή από το να καταστρέψετε την πισίνα και να ξεκινήσετε από την αρχή. Ακόμη και η κατάργηση του vdev δεν θα σας σώσει από μια χαλασμένη διαμόρφωση ashift!

Μηχανισμός αντιγραφής σε εγγραφή

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Εάν ένα κανονικό σύστημα αρχείων χρειάζεται να αντικαταστήσει δεδομένα, αλλάζει κάθε μπλοκ όπου βρίσκεται

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Ένα σύστημα αρχείων αντιγραφής σε εγγραφή γράφει μια νέα έκδοση μπλοκ και στη συνέχεια ξεκλειδώνει την παλιά έκδοση

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Αφηρημένα, αν αγνοήσουμε την πραγματική φυσική θέση των μπλοκ, τότε ο "κομήτης δεδομένων" μας απλοποιείται σε ένα "σκουλήκι δεδομένων" που μετακινείται από αριστερά προς τα δεξιά στον χάρτη του διαθέσιμου χώρου

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Τώρα μπορούμε να έχουμε μια καλή ιδέα για το πώς λειτουργούν τα στιγμιότυπα αντιγραφής σε εγγραφή - κάθε μπλοκ μπορεί να ανήκει σε πολλά στιγμιότυπα και θα παραμείνει μέχρι να καταστραφούν όλα τα σχετικά στιγμιότυπα

Ο μηχανισμός Copy on Write (CoW) είναι η θεμελιώδης βάση αυτού που κάνει το ZFS ένα τόσο εκπληκτικό σύστημα. Η βασική ιδέα είναι απλή - εάν ζητήσετε από ένα παραδοσιακό σύστημα αρχείων να αλλάξει ένα αρχείο, θα κάνει ακριβώς αυτό που ζητήσατε. Εάν ζητήσετε από ένα σύστημα αρχείων αντιγραφής σε εγγραφή να κάνει το ίδιο, θα σας πει "ok" αλλά θα σας πει ψέματα.

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

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

Η αντιγραφή σε εγγραφή στο ZFS δεν πραγματοποιείται μόνο σε επίπεδο συστήματος αρχείων, αλλά και σε επίπεδο διαχείρισης δίσκου. Αυτό σημαίνει ότι το ZFS δεν επηρεάζεται από το λευκό διάστημα (μια τρύπα στο RAID) - ένα φαινόμενο κατά το οποίο η λωρίδα είχε χρόνο να εγγραφεί μόνο εν μέρει πριν από τη συντριβή του συστήματος, με ζημιά στη συστοιχία μετά από επανεκκίνηση. Εδώ η λωρίδα γράφεται ατομικά, το vdev είναι πάντα διαδοχικό και Ο Μπομπ είναι θείος σου.

ZIL: Αρχείο καταγραφής προθέσεων ZFS

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Το σύστημα ZFS αντιμετωπίζει τις σύγχρονες εγγραφές με έναν ειδικό τρόπο - τις αποθηκεύει προσωρινά αλλά αμέσως στο ZIL πριν τις γράψει μόνιμα αργότερα μαζί με ασύγχρονες εγγραφές.

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Συνήθως, τα δεδομένα που είναι γραμμένα σε ένα ZIL δεν διαβάζονται ποτέ ξανά. Αλλά είναι δυνατό μετά από κατάρρευση συστήματος

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Το SLOG, ή δευτερεύουσα συσκευή LOG, είναι απλώς ένα ειδικό - και κατά προτίμηση πολύ γρήγορο - vdev, όπου το ZIL μπορεί να αποθηκευτεί χωριστά από τον κύριο χώρο αποθήκευσης

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Μετά από μια συντριβή, όλα τα βρώμικα δεδομένα στο ZIL αναπαράγονται ξανά - σε αυτήν την περίπτωση, το ZIL είναι στο SLOG, επομένως επαναλαμβάνεται από εκεί

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

Οι συγχρονισμένες εγγραφές είναι εντελώς διαφορετικό θέμα. Όταν μια εφαρμογή ζητά μια σύγχρονη εγγραφή, λέει στο σύστημα αρχείων: "Πρέπει να το δεσμεύσετε σε μη πτητική μνήμη τώραμέχρι τότε, δεν μπορώ να κάνω τίποτα άλλο». Επομένως, οι σύγχρονες εγγραφές θα πρέπει να δεσμεύονται αμέσως στο δίσκο — και αν αυτό αυξάνει τον κατακερματισμό ή μειώνει την απόδοση, τότε ας είναι.

Το ZFS χειρίζεται τις σύγχρονες εγγραφές διαφορετικά από τα κανονικά συστήματα αρχείων—αντί να τις δεσμεύει αμέσως σε κανονική αποθήκευση, το ZFS τις δεσμεύει σε μια ειδική περιοχή αποθήκευσης που ονομάζεται ZFS Intent Log ή ZIL. Το κόλπο είναι ότι αυτοί οι δίσκοι επίσης παραμένουν στη μνήμη, συγκεντρώνονται μαζί με κανονικά αιτήματα ασύγχρονης εγγραφής, για να αποθηκευτούν αργότερα ως απολύτως κανονικά TXG (Ομάδες Συναλλαγών).

Σε κανονική λειτουργία, το ZIL εγγράφεται και δεν διαβάζεται ποτέ ξανά. Όταν, μετά από λίγα λεπτά, οι εγγραφές από το ZIL δεσμεύονται στην κύρια αποθήκευση σε συνηθισμένα TXG από τη μνήμη RAM, αποσπώνται από το ZIL. Η μόνη φορά που διαβάζεται κάτι από το ZIL είναι όταν εισάγεται η πισίνα.

Εάν το ZFS αποτύχει - κατάρρευση του λειτουργικού συστήματος ή διακοπή ρεύματος - ενώ υπάρχουν δεδομένα στο ZIL, αυτά τα δεδομένα θα διαβαστούν κατά την επόμενη εισαγωγή της ομάδας (για παράδειγμα, κατά την επανεκκίνηση του συστήματος έκτακτης ανάγκης). Οτιδήποτε στο ZIL θα διαβαστεί, θα ομαδοποιηθεί σε TXG, θα δεσμευτεί στην κύρια αποθήκευση και στη συνέχεια θα αποσπαστεί από το ZIL κατά τη διαδικασία εισαγωγής.

Μία από τις βοηθητικές κλάσεις vdev ονομάζεται LOG ή SLOG, η δευτερεύουσα συσκευή του LOG. Έχει έναν σκοπό - να παρέχει στην πισίνα ένα ξεχωριστό, και κατά προτίμηση πολύ πιο γρήγορο, πολύ ανθεκτικό στην εγγραφή vdev για την αποθήκευση του ZIL, αντί να αποθηκεύει το ZIL στο κύριο κατάστημα vdev. Το ίδιο το ZIL συμπεριφέρεται το ίδιο ανεξάρτητα από το πού είναι αποθηκευμένο, αλλά εάν το LOG vdev έχει πολύ υψηλή απόδοση εγγραφής, οι σύγχρονες εγγραφές θα είναι ταχύτερες.

Η προσθήκη ενός vdev με LOG στο pool δεν λειτουργεί δεν μπορεί βελτιώστε την απόδοση ασύγχρονης εγγραφής - ακόμα κι αν επιβάλλετε όλες τις εγγραφές στο ZIL με zfs set sync=always, θα εξακολουθήσουν να συνδέονται με την κύρια αποθήκευση στο TXG με τον ίδιο τρόπο και με τον ίδιο ρυθμό όπως χωρίς το αρχείο καταγραφής. Η μόνη άμεση βελτίωση απόδοσης είναι η καθυστέρηση των σύγχρονων εγγραφών (επειδή το ταχύτερο αρχείο καταγραφής επιταχύνει τις λειτουργίες). sync).

Ωστόσο, σε ένα περιβάλλον που απαιτεί ήδη πολλές σύγχρονες εγγραφές, το vdev LOG μπορεί έμμεσα να επιταχύνει τις ασύγχρονες εγγραφές και τις μη αποθηκευμένες στην κρυφή μνήμη αναγνώσεις. Η μεταφόρτωση καταχωρήσεων ZIL σε ένα ξεχωριστό LOG vdev σημαίνει μικρότερη διαμάχη για το IOPS στον κύριο χώρο αποθήκευσης, γεγονός που βελτιώνει την απόδοση όλων των αναγνώσεων και εγγραφών σε κάποιο βαθμό.

Στιγμιότυπα

Ο μηχανισμός αντιγραφής σε εγγραφή είναι επίσης απαραίτητο θεμέλιο για ατομικά στιγμιότυπα ZFS και σταδιακή ασύγχρονη αναπαραγωγή. Το ενεργό σύστημα αρχείων έχει ένα δέντρο δείκτη που επισημαίνει όλες τις εγγραφές με τρέχοντα δεδομένα - όταν τραβάτε ένα στιγμιότυπο, απλώς δημιουργείτε ένα αντίγραφο αυτού του δέντρου δείκτη.

Όταν μια εγγραφή αντικαθίσταται στο ενεργό σύστημα αρχείων, το ZFS εγγράφει πρώτα τη νέα έκδοση μπλοκ στον αχρησιμοποίητο χώρο. Στη συνέχεια, αποσπά την παλιά έκδοση του μπλοκ από το τρέχον σύστημα αρχείων. Αλλά αν κάποιο στιγμιότυπο αναφέρεται στο παλιό μπλοκ, παραμένει αμετάβλητο. Το παλιό μπλοκ δεν θα αποκατασταθεί πραγματικά ως ελεύθερος χώρος μέχρι να καταστραφούν όλα τα στιγμιότυπα που αναφέρονται σε αυτό το μπλοκ!

Αντιγραφή

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Η βιβλιοθήκη μου Steam το 2015 ήταν 158 GiB και περιλάμβανε 126 αρχεία. Αυτό είναι πολύ κοντά στη βέλτιστη κατάσταση για το rsync - η αναπαραγωγή ZFS μέσω του δικτύου ήταν "μόνο" 927% ταχύτερη.

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Στο ίδιο δίκτυο, η αναπαραγωγή ενός αρχείου εικόνας εικονικής μηχανής Windows 40 των 7 GB είναι μια εντελώς διαφορετική ιστορία. Η αναπαραγωγή του ZFS είναι 289 φορές ταχύτερη από το rsync - ή "μόνο" 161 φορές πιο γρήγορα εάν είστε αρκετά έξυπνοι για να καλέσετε το rsync με --inplace.

Βασικά στοιχεία του ZFS: Αποθήκευση και απόδοση
Όταν μια εικόνα εικονικής μηχανής κλιμακώνεται, τα προβλήματα συγχρονισμού κλιμακώνονται με αυτήν. Το 1,9 TiB δεν είναι τόσο μεγάλο για μια σύγχρονη εικόνα VM - αλλά είναι αρκετά μεγάλο ώστε η αναπαραγωγή του ZFS να είναι 1148 φορές ταχύτερη από το rsync, ακόμη και με το όρισμα --inplace του rsync

Μόλις καταλάβετε πώς λειτουργούν τα στιγμιότυπα, θα πρέπει να είναι εύκολο να κατανοήσετε την ουσία της αναπαραγωγής. Εφόσον ένα στιγμιότυπο είναι απλώς ένα δέντρο δεικτών προς εγγραφές, προκύπτει ότι αν το κάνουμε zfs send στιγμιότυπο, τότε στέλνουμε τόσο αυτό το δέντρο όσο και όλες τις εγγραφές που σχετίζονται με αυτό. Όταν το στέλνουμε αυτό zfs send в zfs receive στον στόχο, γράφει τόσο τα πραγματικά περιεχόμενα του μπλοκ όσο και το δέντρο των δεικτών που αναφέρονται στα μπλοκ στο σύνολο δεδομένων προορισμού.

Τα πράγματα γίνονται ακόμα πιο ενδιαφέροντα στο δεύτερο zfs send. Τώρα έχουμε δύο συστήματα, το καθένα περιέχει poolname/datasetname@1, και τραβάτε ένα νέο στιγμιότυπο poolname/datasetname@2. Επομένως, στην αρχική πισίνα που έχετε datasetname@1 и datasetname@2, και στο target pool μέχρι στιγμής μόνο το πρώτο στιγμιότυπο datasetname@1.

Αφού έχουμε ένα κοινό στιγμιότυπο μεταξύ της πηγής και του στόχου datasetname@1, μπορούμε να το κάνουμε σταδιακή zfs send από πάνω του. Όταν λέμε στο σύστημα zfs send -i poolname/datasetname@1 poolname/datasetname@2, συγκρίνει δύο δέντρα δεικτών. Τυχόν δείκτες που υπάρχουν μόνο σε @2, προφανώς αναφέρονται σε νέα μπλοκ - επομένως χρειαζόμαστε τα περιεχόμενα αυτών των μπλοκ.

Σε ένα απομακρυσμένο σύστημα, η επεξεργασία ενός αυξητικού send το ίδιο απλό. Πρώτα γράφουμε όλες τις νέες καταχωρήσεις που περιλαμβάνονται στη ροή sendκαι, στη συνέχεια, προσθέστε δείκτες σε αυτά τα μπλοκ. Voila, έχουμε @2 στο νέο σύστημα!

Η ασύγχρονη επαυξητική αναπαραγωγή του ZFS είναι μια τεράστια βελτίωση σε σχέση με παλαιότερες μεθόδους που δεν βασίζονται σε στιγμιότυπα, όπως το rsync. Και στις δύο περιπτώσεις, μεταφέρονται μόνο αλλαγμένα δεδομένα - αλλά πρέπει πρώτα να γίνει rsync διαβάστε από το δίσκο όλα τα δεδομένα και στις δύο πλευρές για να ελέγξετε το άθροισμα και να το συγκρίνετε. Αντίθετα, η αναπαραγωγή ZFS δεν διαβάζει τίποτα παρά μόνο δέντρα δεικτών - και τυχόν μπλοκ που δεν υπάρχουν στο κοινό στιγμιότυπο.

Ενσωματωμένη συμπίεση

Ο μηχανισμός αντιγραφής σε εγγραφή απλοποιεί επίσης το ενσωματωμένο σύστημα συμπίεσης. Σε ένα παραδοσιακό σύστημα αρχείων, η συμπίεση είναι προβληματική - τόσο η παλιά όσο και η νέα έκδοση των τροποποιημένων δεδομένων βρίσκονται στον ίδιο χώρο.

Αν θεωρήσουμε ένα κομμάτι δεδομένων στη μέση ενός αρχείου που ξεκινά τη ζωή ως ένα megabyte μηδενικών από 0x00000000 και ούτω καθεξής, είναι πολύ εύκολο να το συμπιέσει σε έναν τομέα στο δίσκο. Τι συμβαίνει όμως αν αντικαταστήσουμε αυτό το megabyte μηδενικών με ένα megabyte ασυμπίεστων δεδομένων όπως JPEG ή ψευδοτυχαίο θόρυβο; Απροσδόκητα, αυτό το megabyte δεδομένων θα απαιτεί όχι έναν, αλλά 256 τομείς 4 KiB και σε αυτό το μέρος του δίσκου είναι δεσμευμένος μόνο ένας τομέας.

Το ZFS δεν έχει αυτό το πρόβλημα, καθώς οι τροποποιημένες εγγραφές γράφονται πάντα σε αχρησιμοποίητο χώρο - το αρχικό μπλοκ καταλαμβάνει μόνο έναν τομέα 4 KiB και η νέα εγγραφή θα καταλάβει 256, αλλά αυτό δεν είναι πρόβλημα - ένα πρόσφατα τροποποιημένο τμήμα από το " μέση" του αρχείου θα εγγραφεί σε αχρησιμοποίητο χώρο ανεξάρτητα από το αν το μέγεθός του έχει αλλάξει ή όχι, οπότε για το ZFS αυτό είναι μια αρκετά συνηθισμένη κατάσταση.

Η εγγενής συμπίεση ZFS είναι απενεργοποιημένη από προεπιλογή και το σύστημα προσφέρει συνδεόμενους αλγόριθμους—προς το παρόν LZ4, gzip (1-9), LZJB και ZLE.

  • LZ4 είναι ένας αλγόριθμος ροής που προσφέρει εξαιρετικά γρήγορη συμπίεση και αποσυμπίεση και οφέλη απόδοσης για τις περισσότερες περιπτώσεις χρήσης - ακόμη και σε αρκετά αργούς επεξεργαστές.
  • GZIP είναι ένας αξιοσέβαστος αλγόριθμος που όλοι οι χρήστες του Unix γνωρίζουν και αγαπούν. Μπορεί να εφαρμοστεί με τα επίπεδα συμπίεσης 1-9, με το λόγο συμπίεσης και τη χρήση της CPU να αυξάνεται καθώς πλησιάζει το επίπεδο 9. Ο αλγόριθμος είναι κατάλληλος για όλες τις περιπτώσεις χρήσης κειμένου (ή άλλες εξαιρετικά συμπιεστές), αλλά κατά τα άλλα προκαλεί συχνά προβλήματα CPU - χρησιμοποιήστε τον με προσοχή, ειδικά σε υψηλότερα επίπεδα.
  • LZJB είναι ο αρχικός αλγόριθμος στο ZFS. Είναι καταργημένο και δεν πρέπει πλέον να χρησιμοποιείται, το LZ4 το ξεπερνά από κάθε άποψη.
  • ΚΑΚΩΣ - Κωδικοποίηση μηδενικού επιπέδου, Κωδικοποίηση μηδενικού επιπέδου. Δεν αγγίζει καθόλου τα κανονικά δεδομένα, αλλά συμπιέζει μεγάλες ακολουθίες μηδενικών. Χρήσιμο για εντελώς ασυμπίεστα σύνολα δεδομένων (όπως JPEG, MP4 ή άλλες ήδη συμπιεσμένες μορφές), καθώς αγνοεί τα ασυμπίεστα δεδομένα αλλά συμπιέζει τον αχρησιμοποίητο χώρο στις εγγραφές που προκύπτουν.

Συνιστούμε συμπίεση LZ4 για σχεδόν όλες τις περιπτώσεις χρήσης. η ποινή απόδοσης όταν αντιμετωπίζετε ασυμπίεστα δεδομένα είναι πολύ μικρή και ανάπτυξη η απόδοση για τυπικά δεδομένα είναι σημαντική. Αντιγραφή εικόνας εικονικής μηχανής για νέα εγκατάσταση του λειτουργικού συστήματος Windows (πρόσφατο εγκατεστημένο λειτουργικό σύστημα, δεν υπάρχουν ακόμη δεδομένα μέσα) με compression=lz4 πέρασε 27% πιο γρήγορα από ό,τι με compression=noneΣε αυτό το τεστ το 2015.

ARC - προσαρμοστική αντικατάσταση προσωρινής μνήμης

Το ZFS είναι το μόνο σύγχρονο σύστημα αρχείων που γνωρίζουμε που χρησιμοποιεί τον δικό του μηχανισμό αποθήκευσης προσωρινής μνήμης ανάγνωσης, αντί να βασίζεται στην προσωρινή μνήμη σελίδων του λειτουργικού συστήματος για την αποθήκευση αντιγράφων των μπλοκ πρόσφατα αναγνωσμένων στη μνήμη RAM.

Αν και η εγγενής μνήμη cache δεν είναι χωρίς προβλήματα - το ZFS δεν μπορεί να ανταποκριθεί σε νέα αιτήματα εκχώρησης μνήμης τόσο γρήγορα όσο ο πυρήνας, επομένως η νέα πρόκληση malloc() στην εκχώρηση μνήμης μπορεί να αποτύχει εάν χρειάζεται η μνήμη RAM που είναι κατειλημμένη αυτήν τη στιγμή από το ARC. Αλλά υπάρχουν καλοί λόγοι για να χρησιμοποιήσετε τη δική σας προσωρινή μνήμη, τουλάχιστον προς το παρόν.

Όλα τα γνωστά σύγχρονα λειτουργικά συστήματα, συμπεριλαμβανομένων των MacOS, Windows, Linux και BSD, χρησιμοποιούν τον αλγόριθμο LRU (Last Recently Used) για την υλοποίηση της προσωρινής μνήμης σελίδων. Αυτός είναι ένας πρωτόγονος αλγόριθμος που ωθεί το μπλοκ στην κρυφή μνήμη "πάνω στην ουρά" μετά από κάθε ανάγνωση και σπρώχνει τα μπλοκ "κάτω στην ουρά" όπως χρειάζεται για να προσθέσει νέες ελλείψεις προσωρινής μνήμης (μπλοκ που θα έπρεπε να έχουν διαβαστεί από το δίσκο, όχι από τη μνήμη cache) πάνω.

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

ARC είναι ένας πολύ λιγότερο αφελής αλγόριθμος που μπορεί να θεωρηθεί ως "σταθμισμένη" κρυφή μνήμη. Κάθε φορά που διαβάζεται ένα μπλοκ αποθηκευμένο στην κρυφή μνήμη, γίνεται λίγο πιο «βαρύ» και πιο δύσκολο να αποβληθεί - ακόμα και μετά την εξάλειψη ενός μπλοκ παρακολουθούνται μέσα σε ορισμένο χρονικό διάστημα. Ένα μπλοκ που έχει απομακρυνθεί αλλά στη συνέχεια πρέπει να διαβαστεί ξανά στην κρυφή μνήμη θα γίνει επίσης "βαρύτερο".

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

Συμπέρασμα

Αφού μάθουμε τη βασική σημασιολογία του ZFS - πώς λειτουργεί το copy-on-write, καθώς και τις σχέσεις μεταξύ ομάδων αποθήκευσης, εικονικών συσκευών, μπλοκ, τομέων και αρχείων - είμαστε έτοιμοι να συζητήσουμε την απόδοση του πραγματικού κόσμου με πραγματικούς αριθμούς.

Στο επόμενο μέρος, θα ρίξουμε μια ματιά στην πραγματική απόδοση των pools με mirrored vdevs και RAIDz, μεταξύ τους, καθώς και σε σχέση με τις παραδοσιακές τοπολογίες RAID του πυρήνα Linux που έχουμε εξερευνήσει. νωρίτερα.

Στην αρχή, θέλαμε να καλύψουμε μόνο τα βασικά - τις ίδιες τις τοπολογίες ZFS - αλλά μετά ένα τέτοιο Ας ετοιμαστούμε να μιλήσουμε για πιο προηγμένη ρύθμιση και ρύθμιση του ZFS, συμπεριλαμβανομένης της χρήσης βοηθητικών τύπων vdev όπως L2ARC, SLOG και Special Allocation.

Πηγή: www.habr.com

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