HwBox Guide: Στήνουμε ένα RAID
Introduction Introduction
Ήταν η μέρα στην οποία κατέφτασε στο HwBox lab μια στοίβα από SSD. Οι 4 εκ των οποίων προοριζόταν για τις ανάγκες των συστημάτων δοκιμών του εργαστηρίου. Κάπως έτσι, κινούμενος πάντα υπό το μότο “ποτέ το σύστημά μου δεν είναι το πιο γρήγορο, ποτέ μια οθόνη δεν είναι αρκετή και ποτέ ένας δίσκος δεν μου φτάνει”, άρχισε να με τρώει η περιέργεια. Πως μπορώ να τους χρησιμοποιήσω όλους μαζί; Πως μπορώ να πάρω ακόμα περισσότερη ταχύτητα από αυτήν που με περιορίζει το SATA 3, και πως μπορώ να έχω ένα επίπεδο προστασίας σε περίπτωση που κάποιος χαλάσει; Μα πάνω απʼ όλα, αξίζει τον κόπο;
Η απάντηση είναι σχεδόν μονόδρομος, και ακούει στο όνομα RAID.
Οι συστοιχίες δίσκων δεν είναι κάτι καινούριο στον χώρο τον υπολογιστών, αντιθέτως βρίσκουν την εφαρμογή τους εδώ και αρκετές δεκαετίες κυρίως στην βιομηχανία. Γυρίζοντας πίσω τον χρόνο στο 1987, που πικραίνει τον γράφοντα κάθε φορά που κάποιος το αποκαλεί «μακρινό», τρεις μηχανικοί του Πανεπιστημίου Berkeley στην California, εν ονόματι David Patterson, Garth A. Gibson και Randy Katz στο έργο τους "A Case for Redundant Arrays of Inexpensive Disks” εφευρίσκουν τον όρο RAID, με τον κύριο ισχυρισμό τους να είναι πως μια συστοιχία από φτηνούς δίσκους μπορεί να κερδίσει σε απόδοση τις ακριβές – για τότε - μονάδες των mainframes, επιτυγχάνοντας εξίσου και μεγαλύτερη αξιοπιστία και συμβάλλοντας δραματικά στην μείωση του κόστους για τις, ολοένα αυξανόμενες, ανάγκες αποθήκευσης. Δεν πέρασαν παρά μόνο 2 χρόνια ώστε η βιομηχανία να συμφωνήσει σε μερικά standards που θα εφαρμόζονταν στην πλειοψηφία των επαγγελματικών συστημάτων, παρουσιάζοντας το ολοκληρωμένο πρότυπο RAID.
Επαναφορά ξανά πίσω στις μέρες μας, όπου και ο όρος “Inexpensive” αντικαταστάθηκε με τον όρο Independent, μιας και πλέον το κόστος των μέσων αποθήκευσης έχει μειωθεί δραματικά την τελευταία 15ετία. Επιπλέον, η πρόοδος στην αρχιτεκτονική υπολογιστών και στις μεθόδους ολοκλήρωσης καθώς και η μείωση του κόστους των απαραίτητων ελεγκτών, έχει καταστήσει δυνατή την ενσωμάτωση μονάδων RAID σε μια μεγάλη μερίδα των motherboards που κυκλοφορούν στην αγορά. Δεν θα μπορούσαμε να βρούμε καλύτερη ευκαιρία από το να αξιοποιήσουμε αυτό το χαρακτηριστικό που οι περισσότεροι έχουμε στα PC μας.
[B]Disk Arrays – Συστοιχίες δίσκων [/B]
Internal disclaimer: Πολλές από τις παρακάτω αναφορές δεν είναι απαραίτητα και σωστές. Όμως το guide γίνεται με σκοπό την ενημέρωση του αρχάριου, και γιʼ αυτό κάποιες έννοιες έχουν απλοποιηθεί ώστε να είναι πιο ευκολονόητες.
Πριν περάσουμε στην πράξη, αξίζει να κάνουμε μια σύντομη στάση στην θεωρία και τις βασικές έννοιες. Το RAID αποτελεί μέρος μιας γενικότερης κατηγορίας, αυτήν που ονομάζουμε ως «Συστοιχία Δίσκων» (Disk Array). Μια συστοιχία δίσκων είναι επί της ουσίας ένα σύστημα αποθήκευσης δεδομένων, το οποίο αποτελείται από πολλαπλές μονάδες δίσκων και μνήμης cache, σχηματίζοντας έτσι μια εικονική «δεξαμενή αποθήκευσης» (storage pool), η οποία παρουσιάζεται στο λειτουργικό σύστημα ως μια ενιαία μονάδα αποθήκευσης, και η οποία δεν ενδιαφέρεται για το είδος του συστήματος αρχείων και των δεδομένων που θα εγγραφτούν προς αυτή. Ο στόχος είναι απλός: μέσω μιας αποτελεσματικής διανομής των δεδομένων προς τις μονάδες αποθήκευσης, η συστοιχία προσπαθεί να επιτύχει ανοχή στα σφάλματα ακόμα και μετά από απώλεια μονάδων, καθώς και μεγαλύτερη ταχύτητα.
Βέβαια, αυτό δεν είναι κάτι απλό. Για να επιτευχθεί κάτι τέτοιο, απαιτείται ένας εξειδικευμένος ελεγκτής ο οποίος αναλαμβάνει ως υπεύθυνος διαχείρισης της διανομής των δεδομένων, καθώς και τον αντίστροφο δρόμο για την «ερμηνεία» των δεδομένων προς το λειτουργικό σύστημα. Αυτό οφείλεται κυρίως στο γεγονός πως τα περισσότερα είδη συστοιχιών εισάγουν, όπως είπαμε νωρίτερα, και ανοχή σφαλμάτων – πράγμα που σημαίνει πως απαιτείται επιπλέον μορφή πληροφορίας η οποία θα αποθηκευτεί στο array, και η οποία θα είναι χρήσιμη ώστε σε περίπτωση απώλειας κάποιας μονάδας, να είναι δυνατή η ανάκτηση των χαμένων δεδομένων. Προς το παρόν δεν θα αγγίξουμε περισσότερο αυτό το θέμα, μιας και δεν θα ασχοληθούμε με τόσο πολύπλοκα arrays – αν παρʼ όλα αυτά αν το θέλετε και σεις, δείξτε μας το ενδιαφέρον σας και θα προσπαθήσουμε να σας καλύψουμε!
Συνεχίζοντας με την μικρή εισαγωγή στην θεωρία, θα σταθούμε στον θέμα του ελεγκτή. Όπως είπαμε και νωρίτερα η χρήση ενός ελεγκτή είναι απαραίτητη για την δημιουργία μιας συστοιχίας, όμως δεν είναι απαραίτητη πάντα η «φυσική» του παρουσία. Για να το θέσουμε με πιο απλά λόγια, η δημιουργία ενός array μπορεί να γίνει μέσω 2 τρόπων: είτε Software-based, είτε hardware-based. Ξεκινώντας με τον δεύτερο, την θέση του ελεγκτή αναλαμβάνει μια συγκεκριμένη μονάδα την οποία θα την συναντήσουμε είτε πάνω στην μητρική, είτε σε κάποια μορφή κάρτας επέκτασης – όπως για παράδειγμα μια επιπρόσθετη κάρτα που παρέχει περισσότερες SATA θύρες. Για την πρώτη περίπτωση, δεν είναι αναγκαία η ύπαρξη ελεγκτή, αλλά είναι δυνατή η δημιουργία συστοιχίας μέσω εξειδικευμένων προγραμμάτων, τα οποία επιτυγχάνουν το array σε επίπεδο λογισμικού (software layer). Όμως, σε οτιδήποτε έχει να κάνει με εξομοίωση λειτουργιών μέσω λογισμικού, όλον το υπολογιστικό φόρτο τον χρεώνεται ο κεντρικός επεξεργαστής - κάτι το οποίο μπορεί να έχει δραματικές επιπτώσεις στην συνολική ταχύτητα του συστήματος μιας και χρησιμοποιούνται αρκετοί πόροι του. Αντίθετα, ένας hardware controller αναλαμβάνει να πάρει όλο το workload από τον επεξεργαστή, αλλά εναπόκειται στην ταχύτητα του συγκεκριμένου controller η απόδοση της συστοιχίας.
[B]Enter the RAID[/B]
Οι συστοιχίες αποτελούν μια τελείως γενική έννοια. Εφόσον λοιπόν πήρατε μια σφαιρική ενημέρωση για τα arrays, ήρθε η ώρα να δούμε και μερικά πράγματα για το πρωτόκολλο το οποίο κάνει πράξη τα όσα αναφέραμε παραπάνω.
Ο όρος RAID αποτελεί μια συντομογραφία του Redundant Array of Independent Disks, είτε Ελληνιστί «Πλεονάζουσα Συστοιχία Ανεξάρτητων Δίσκων». Ο όρος που θα ξεχωρίσουμε είναι ο “redundant”, και επί της ουσίας υπαινίσσεται πως η συστοιχία προσφέρει «πλεονασμό δεδομένων» για εύκολη ανάκτηση σε περίπτωση αποτυχίας, όπως αναφέραμε και νωρίτερα – αν και αυτό δεν είναι απαραίτητο σε όλες τις περιπτώσεις. Και ενώ λοιπόν η έννοια της συστοιχίας είναι πολύ γενική, το RAID είναι το πρωτόκολλο το οποίο περιγράφει ακριβώς τους τρόπους και τις δομές δεδομένων, με τα οποία θα δημιουργηθεί και θα λειτουργεί το array.
Επειδή υπάρχουν διαφορετικές ανάγκες και απαιτήσεις από κάθε συστοιχία, δημιουργήθηκαν και διαφορετικές μορφές RAID, γνωστές και ως «Επίπεδα του RAID» (Standard RAID levels). Αν και στην αρχή δημιουργήθηκαν 5 στάνταρ επίπεδα, με το πέρασμα των χρόνων έχουν δημιουργηθεί αρκετά περισσότερα, με κάποια από αυτά όμως να μην χρησιμοποιούνται πλέον στην βιομηχανία, ενώ άλλα είναι proprietary μορφής και απαιτούν εξειδικευμένο εξοπλισμό.
Ας δούμε λοιπόν μερικά από τα πιο διαδεδομένα RAID levels:
[B]Εμφωλευμένα / Υβριδικά RAID (Nested / Hybrid RAID)[/B]
Τα παραπάνω RAID επίπεδα μπορούν και να συνδυαστούν μεταξύ τους – έτσι μπορούμε να δημιουργήσουμε RAID μεταξύ RAID συστοιχιών. Για παράδειγμα, μπορούμε να δημιουργήσουμε ένα RAID 0 από ένα RAID 1 ή και το ανάποδο, αλλά δεν μπορούμε να πάμε βαθύτερα από δυο επίπεδα – άλλωστε κάτι τέτοιο θα περιπλέξει αρκετά την συστοιχία μας. Το τελικό array ονομάζεται και σαν “top array”, ενώ στο παράδειγμά μας αποκαλείται ως RAID 1 + 0. Μερικοί κατασκευαστές τείνουν να αφαιρούν το σύμβολο «+» από την τελική ονομασία, καταλήγοντας στο RAID 10 – όμως οτιδήποτε παραπάνω από το RAID 6 είναι ένα εμφωλευμένο RAID.
Ας δούμε μερικά από τα πιο γνωστά παραδείγματα:
[B]Άλλες μορφές συστοιχιών[/B]
Αφήνοντας στην άκρη τα software-based arrays, υπάρχει και άλλη μια μορφή συστοιχίας η οποία δεν κατατάσσεται στο RAID πρότυπο. Πρόκειται για το γνωστό μας JBOD, το οποίο είναι και μια συντομογραφία του “Just a bunch of disks” («απλώς μια στοίβα δίσκων»). Το συγκεκριμένο array δεν κάνει τίποτα περισσότερο από το να προσφέρει το σύνολο της χωρητικότητας μερικών δίσκων, ανεξαρτήτου χωρητικότητας. Έτσι μπορούμε να πάρουμε μερικούς δίσκους Α, Β και Γ και με την χρήση του JBOD να έχουμε ένα array συνολικής χωρητικότητας Χ=Α+Β+Γ – δηλαδή την μέγιστη χωρητικότητα, σε αντίθεση με τα διάφορα επίπεδα του RAID που προκύπτει λιγότερη σε σχέση με το σύνολο που μπορούν να προσφέρουν όλοι οι δίσκοι. Εδώ όμως θα πρέπει να σημειώσουμε πως το JBOD δεν προσφέρει καμία απολύτως βελτίωση ούτε σε θέματα απόδοσης, ούτε και σε θέματα αξιοπιστίας – πράγμα που σημαίνει πως θα πρέπει να αποφεύγεται αν τα δεδομένα που πρόκειται να εγγραφτούν είναι σημαντικά. Επίσης, οι περισσότεροι controllers δεν προσφέρουν δυνατότητα για JBOD, το οποίο θα το συναντήσουμε μόνο σε software επίπεδο.
Προετοιμασία
O βασικός storage controller της μητρικής μας βρίσκεται ενσωματωμένος στο Intel PCH. Σε αρκετές περιπτώσεις υπάρχει και δεύτερος συμπληρωματικό ελεγκτής που παρέχει τις παραπάνω από τις 6 SATA θύρες που μπορεί να διαχειριστεί το PCH. Πριν ξεκινήσουμε λοιπόν, θα πρέπει να συμβουλευτούμε το εγχειρίδιο της μητρικής μας ώστε να αναγνωρίσουμε ποιες θύρες ελέγχει ο εκάστοτε controller, και ο λόγος είναι ότι θα πρέπει να συνδέσουμε τους δίσκους μας πάνω στον ίδιο ελεγκτή. Στην πλειοψηφία των περιπτώσεων ισχύει πως οι πρώτες δυο θύρες (SATA_0 και SATA_1) ανήκουν στον Intel PCH, αλλά καλό θα ήταν να το επαληθεύσουμε μέσα από το userʼs manual.
Έχοντας τα πάντα έτοιμα, ήρθε η ώρα για τις βασικές ρυθμίσεις. Η μητρική που χρησιμοποιούμε στο παράδειγμά μας είναι η ASRock Z170 Extreme7+ παρέα με έναν Core i7 6700K και 4x4GB Corsair Dominator Platinum, ενώ τα drives που θα χρησιμοποιήσουμε στις δοκιμές μας πρόκειται για ένα ζευγάρι από OCZ Arc 100 χωρητικότητας 240 GB έκαστο.
Σημαντικό: Η δημιουργία οποιουδήποτε array θα απαιτήσει και την οριστική διαγραφή των δεδομένων στα drives που θα χρησιμοποιηθούν. Για τον λόγο αυτό χρησιμοποιήστε άδειους δίσκους, ή δίσκους που δεν σας ενδιαφέρουν τα δεδομένα τους – εφόσον είσαστε σίγουροι για το τελευταίο.
Βασική προϋπόθεση είναι η ρύθμιση του ελεγκτή ώστε να λειτουργεί σε RAID mode. Εξʼ ορισμού η προεπιλογή είναι το AHCI mode, οπότε θα πρέπει να μεταβούμε στις ρυθμίσεις του BIOS και να το αλλάξουμε. Έτσι, μετά το αρχικό boot πατάμε το πλήκτρο Delete (ή το F2) και εισερχόμαστε στο UEFI BIOS. Από εκεί μεταβαίνουμε στην καρτέλα Storage Configuration, όπου είμαστε σε θέση να τροποποιήσουμε τις ρυθμίσεις του ελεγκτή δίσκων του Intel Z170.
Στην επιλογή SATA Mode, παρατηρούμε πως η default επιλογή είναι το AHCI. Από εκεί διαλέγουμε την επιλογή RAID. Αυτή η επιλογή θα ενεργοποιήσει την εκκίνηση της ειδικής OpROM η οποία είναι υπεύθυνη για την δημιουργία και διαχείριση του RAID. Πιο συγκεκριμένα, αυτή η OpROM συγκαταλέγεται στην πλατφόρμα Intel Rapid Storage Technology, που είναι και η πλατφόρμα για την διαχείριση των array.
Με το πλήκτρο F10 αποθηκεύουμε τις αλλαγές μας. Το κρατάει τις ρυθμίσεις μας και επανεκκινεί.
The RAID 0
Ως γνωστόν, ένα σύστημα θεωρείται τόσο αργό, όσο το πιο αργό κομμάτι του. Μέχρι σήμερα, το πιο αργό κομμάτι ενός υπολογιστή είναι και το αποθηκευτικό του κομμάτι, καθώς στην συντριπτική του πλειοψηφία η συνήθης διαμεταγωγή δεδομένων περιορίζεται σε εκατοντάδες MB ανά δευτερόλεπτα, την ώρα που στα υπόλοιπα υποσυστήματα η κλίμακα κινείται στην τάξη των δεκάδων GB/s.
Πάμε λοιπόν να δούμε την πρώτη μορφή για RAID μεταξύ δίσκων. Η συγκεκριμένη διάταξη είναι και η πιο διαδεδομένη για τους home users, και έκανε θραύση αρκετά την εποχή όπου κυριαρχούσαν οι μηχανικοί δίσκοι ως OS drive. Ο λόγος είναι πολύ απλός: το σημαντικό throughput performance που προσφέρει, καθώς και καμία απώλεια χωρητικότητας, βελτίωσαν σημαντικά τις επιδόσεις του συστήματος. Στις μέρες μας, και με την χρήση των σύγχρονων SSD, το RAID 0 δεν είναι και τόσο διαδεδομένο, παρʼ όλα αυτά ένας καλός συνδυασμός μπορεί να επιφέρει ακόμα περισσότερη βελτίωση στην απόδοση του συστήματος.
Πως λειτουργεί; Η λογική είναι απλή. Το RAID 0 σχηματίζει ένα storage pool μεταξύ των δίσκων, και αναλαμβάνει να διαχωρίσει τα δεδομένα ισότιμα μεταξύ των δίσκων, διαχωρίζοντάς τα σε «λωρίδες» (stripes). Τα stripes μπορούν να έχουν μεγέθη που κυμαίνονται από τα 4 έως και τα 128 kilobytes. Τα μικρά μεγέθη stripes εξυπηρετούν σε απόδοση όταν οι εγγραφές αφορούν μικρά αρχεία, ενώ τα μεγαλύτερα ευνοούν την αποθήκευση μεγάλων αρχείων. Η ανάγνωση των δεδομένων γίνεται με παρόμοιο τρόπο, με τον κεντρικό ελεγκτή να διαβάζει ταυτόχρονα και από τις δυο (ή και παραπάνω) μονάδες τα δεδομένα (λωρίδες) και να συνθέτει το τελικό, ολοκληρωμένο αποτέλεσμα. Η ταυτόχρονη ανάγνωση αλλά και εγγραφή δεδομένων από και προς διαφορετικές μονάδες, αυξάνει δραματικά το I/O performance, με το scaling να έχει την δυνατότητα να φτάσει μέχρι και το 100% - για παράδειγμα δυο drives σε RAID 0 μπορούν να έχουν διπλάσια απόδοση από την μια μονάδα μόνη της.
Το παραπάνω σχηματικό απεικονίζει συνοπτικά την διανομή των δεδομένων μεταξύ δυο δίσκων σε RAID 0. Όπως είναι εμφανές, τα δεδομένα διαχωρίζονται κατά τέτοιον τρόπο ώστε να είναι δυνατή η ταυτόχρονη ανάγνωση και εγγραφή και από τις δυο μονάδες, με τον διαθέσιμο χώρο να ορίζεται από τον εξής τύπο: Αν “F” είναι το μέγεθος του array, και “n” η χωρητικότητα της μιας μονάδας μας, εφόσον πρόκειται να τότε προκύπτει:
Που ισούται με το άθροισμα των χωρητικοτήτων των drive, αρκεί αυτά να είναι ίσης χωρητικότητας.
«Ναι, αλλά τι γίνεται αν έχω δυο διαφορετικά drive, με διαφορετικές χωρητικότητες»; Η απάντηση είναι απλή.
Στην περίπτωση αυτή η δημιουργία του RAID 0 είναι δυνατή, με το array που θα δημιουργηθεί να είναι ίσο με 2 φορές την χωρητικότητα του μικρότερου από τους δύο, ενώ
... η διαφορά τους “D” θα παραμείνει ένας κενός και ανεκμετάλλευτος χώρος. Επιπλέον, η ταχύτητα του array θα ισοδυναμεί με την ταχύτητα του πιο αργού εκ των δυο drive. Συνεπώς, το RAID 0 είναι δυνατό σε μια τέτοια περίσταση, αλλά δεν συνίσταται.
Όμως εδώ θα πρέπει να τονίσουμε το εξής: Δεν υπάρχει καμία απολύτως πρόβλεψη για πλεονάζουσα πληροφορία – κάτι που αν το ερμηνεύσουμε σημαίνει πως αν οποιοδήποτε από τα drives του array αποτύχει, τότε το array καταστρέφεται και δεν υπάρχει απολύτως καμία δυνατότητα ανάκτησης της χαμένης πληροφορίας. Για τον λόγο αυτό, το RAID 0 συνίσταται μόνο για αποθήκευση μη σημαντικής πληροφορίας, όπως το λειτουργικό σύστημα και τα προγράμματα. Αν θέλετε να κρατήσετε σημαντικά δεδομένα, τότε θα πρέπει να κοιτάξετε σε άλλες διατάξεις, και φυσικά back-ups!
Ολοκληρώνοντας την θεωρία, ας δούμε και την πράξη. Στην συγκεκριμένη περίπτωση θα χρησιμοποιήσουμε την δυνατότητα που μας παρέχει η ASRock Z170 Extreme7+ και του ενσωματωμένου ελεγκτή που βρίσκεται στο Z170 chipset.
Πάμε λοιπόν να δούμε τα βήματα:
Έχοντας κάνει τις απαιτούμενες ρυθμίσεις που εξηγήσαμε στην προηγούμενη σελίδα, αφήνουμε το σύστημα να περάσει την αρχική οθόνη, μέχρι να εμφανιστεί εκείνη που μας δείχνει τις πληροφορίες της OpROM, και η οποία απαριθμεί τους εγκατεστημένους δίσκους του συστήματος. Εκεί πρέπει να πατήσουμε και τον συνδυασμό πλήκτρων Ctrl + I, ώστε να μεταβούμε στην πλατφόρμα Intel RST.
Από εδώ και πέρα τα πράγματα είναι αρκετά απλά. Διαλέγουμε την επιλογή Create RAID Volume και πατάμε Enter.
Στην επόμενη οθόνη μας εμφανίζονται και οι επιλογές για την δημιουργία ενός νέου RAID Volume. Το πρώτο βήμα είναι ο καθορισμός του ονόματος – που μπορείτε και να αφήσετε το προεπιλεγμένο εάν δεν σας ενδιαφέρει.
Το αμέσως επόμενο βήμα είναι η επιλογή του RAID level, που στην συγκεκριμένη περίπτωση θα το αφήσουμε στο RAID0 (Stripe).
Αμέσως επόμενο βήμα είναι η επιλογή των δίσκων που θα αποτελέσουν την συστοιχία μας. Στην προκειμένη περίπτωση διαλέγουμε τους δίσκους που θέλουμε ώστε να τοποθετηθούν στο array.
Επόμενο βήμα είναι η επιλογή του μεγέθους του stripe. Εδώ έχουμε αρκετές επιλογές, αλλά και η default των 16ΚΒ αποτελεί μια αρκετά καλή λύση για συνδυασμό σε OS drives, το οποίο αποθηκεύει τόσο μεγάλα όσο και μικρά αρχεία. Στο παράδειγμα της φωτογραφίας χρησιμοποιήσαμε 64KB stripe, μόνο χάρην παραδείγματος. Πιο αναλυτικά στην απόδοση των stripes θα επεκταθούμε σε επόμενη σελίδα.
Τελικό βήμα είναι η επιλογή του Create Volume. Θα χρειαστούν μόλις μερικά δευτερόλεπτα έως ότου το array να είναι έτοιμο προς χρήση!
Αυτό ήταν! Από εκεί και πέρα προχωράμε κανονικά με την εγκατάσταση του λειτουργικού μας συστήματος, όπως ακριβώς θα κάναμε με οποιονδήποτε δίσκο. Εδώ θα σημειώσουμε το εξής: αν η Εγκατάσταση δεν αναγνωρίζει την ύπαρξη δίσκου, τότε θα χρειαστεί να φορτώσουμε κάποιους επιπλέον drivers οι οποίοι συνήθως βρίσκονται στο συνοδευτικό DVD της μητρικής.
Το RAID 0 μας είναι έτοιμο! Για περισσότερη ανάλυση στην απόδοση του RAID 0, ακολουθεί στην επόμενη σελίδα.
Benchmarking
Εφόσον λοιπόν διαλέξατε την διάταξη για RAID 0, υπάρχουν μερικές λεπτομέρειες που πρέπει να διευκρινιστούν. Ποια είναι ακριβώς τα οφέλη, τι κερδίζετε και τι χάνετε, ενώ θα προσπαθήσουμε να δούμε και τις διαφορές που υπάρχουν ανάμεσα στα διάφορα μεγέθη των stripe. Το μέγεθος του κάθε stripe κυμαίνεται από τα 4KB μέχρι και τα 128KB, θα προσπαθήσουμε όμως να αναλύσουμε ποιες είναι οι διαφορές μεταξύ τους
Για να κάνουμε την περαιτέρω ανάλυση, θέσαμε την συστοιχία μας σε μερικά από τα πιο γνωστά storage benchmarks. Επιλέξαμε ανάμεσα στα 3 δημοφιλή stripe sizes, εκείνα των 16, 64 και 128 και τα συγκρίνουμε με την απόδοση ενός μονού drive.
Ξεκινάμε με την δημοφιλή σουίτα της Anvil.
Για αρχή, αυτό που ξεχωρίζει είναι η τεράστια διαφορά στις σειριακές αναγνώσεις, όπου εκεί παρατηρήσαμε επιδόσεις σχεδόν διπλάσιες διαμεταγωγές σε σχέση με το απλό drive. Τα πράγματα περιπλέκονται λίγο όταν αρχίζουν οι random αναγνώσεις αρχείων, εκεί όπου όσο μικραίνει το μέγεθος του block της πληροφορίας, τόσο οι επιδόσεις φτάνουν τα επίπεδα ενός μονού δίσκου.
Τα ίδια παρατηρούμε και στις εγγραφές. Από τις πρώτες μας πληροφορίες, βλέπουμε πως η βέλτιστη λύση είναι το 16KB μέγεθος stripe το οποίο αποδίδει εξίσου καλά στις περισσότερες περιπτώσεις, με εκείνο των 128KB να δείχνει πως ευνοεί αρκετά τις σειριακές αναγνώσεις και εγγραφές μεγάλων αρχείων.
Συνεχίζουμε με το AS SSD.
Και σε αυτήν την περίπτωση λαμβάνουμε τα ίδια αποτελέσματα. Λαμπρές οι επιδόσεις σε σειριακές εγγραφές, ικανοποιητική αύξηση σε random αναγνώσεις με μεγάλο queue depth, όμως σε μια απλή ανάγνωση 4Κ τα κέρδη είναι μηδαμινά.
Το CrystalDiskMark μας δίνει μια άλλη εκδοχή, του ίδιου όμως νομίσματος. Εδώ γίνεται εμφανές πως τα υψηλότερα IOPS που προσφέρει μια τέτοια συστοιχία ευνοεί πάρα πολύ τις διαμεταγωγές με μεγάλο queue depth. Από την άλλη, αρχίζει να γίνεται ξεκάθαρο πως οι διαφορές μεταξύ των stripe sizes είναι από μικρές έως αμελητέες, με την πιο λογική επιλογή να δείχνει αυτή των 16Κ.
Από αριστερά προς τα δεξιά παραδίδουμε τα αποτελέσματα στο ATTO Disk Benchmark από 1 drive, 16K RAID 0 και 64Κ RAID 0. Τα βέλτιστα δυνατά εμφανίζονται στην ενδιάμεση επιλογή, όπως αναφέραμε και νωρίτερα.
Από την άλλη πλευρά, το PCMark 7 προσπαθεί να μας δώσει ένα πιο ρεαλιστικό σενάριο χρήσης. Και εδώ είναι που θα διαπιστώσουμε πως αρκετές από τις απλές και καθημερινές εργασίες δεν επωφελούνται ιδιαίτερα από μια διάταξη RAID 0.
Κλείνοντας, ας ρίξουμε και μια ματιά στα boot times. Εδώ παρατηρούμε πως είτε έχουμε SSD είτε RAID 0, οι διαφορές δεν είναι καθόλου εμφανείς. Για την ακρίβεια, η χρήση ενός και μόνου SSD μπορεί να βελτιώσει δραματικά αυτό το κομμάτι, από εκεί και πέρα όμως είναι ελάχιστα τα πράγματα που μπορούμε να κάνουμε ώστε το σύστημα μας να είναι ακόμα ταχύτερο κατά το boot.
Συμπερασματικά, πήρατε μια πολύ καλή ματιά το τι είναι το RAID 0 και που εξυπηρετεί. Σε γενικές γραμμές θα λέγαμε πως οι διαφορές εμφανίζονται σε πολύ συγκεκριμένα σενάρια χρήσης, με τα πιο απλά και καθημερινά να δείχνουν πως δεν επωφελούνται από μια τέτοια διάταξη. Όσο για τα stripe sizes; Ότι και αν τελικά διαλέξετε, οι διαφορές είναι αμελητέες - εκείνο των 16Κ θα πρέπει να είναι αρκετό για τα περισσότερα σενάρια χρήσης.
The RAID 1
Η προστασία σημαντικών δεδομένων μπορεί να έχει διαφορετικές εφαρμογές. Το data redundancy (πλεονασμός δεδομένων) είναι ένας από τους τρόπους προστασίας – παρʼ όλα αυτά δεν θα πρέπει ποτέ να θεωρείται εξίσου ασφαλές με το back – up. Την διαφορά των παραπάνω όρων θα την εξηγήσουμε παρακάτω, όμως πάμε να δούμε έναν από τους εύκολους τρόπους με τους οποίους μπορείτε να έχετε μια έξτρα δικλείδα ασφαλείας για τα δεδομένα σας, όσο και έναν up-and-running αντικαταστάτη σε περίπτωση που το βασικό drive του συστήματος αστοχήσει.
Το RAID 1 δεν βασίζεται σε κάποια δύσκολη και δυσνόητη νοοτροπία – αντιθέτως πρόκειται για ένα από τα πιο απλά είδη συστοιχιών που γνωρίζουμε. Η λογική είναι απλή: Έχουμε ένα drive το οποίο χρησιμοποιείται για αποθήκευση δεδομένων, καθώς και ένα δεύτερο το οποίο αποτελεί ακριβές «είδωλο» / αντίγραφο του πρώτου – αυτός είναι και ο λόγος που σχεδόν πάντα δίπλα από τον όρο RAID 1 θα συναντήσουμε και την λέξη “Mirror” (καθρεύτης). Έτσι, κάθε φορά που υπάρχουν νέες εγγραφές προς το πρώτο, τότε αυτόματα ο ελεγκτής φροντίζει να προσθέσει τις αλλαγές και στο δεύτερο drive. Από την άλλη, οι αναγνώσεις γίνονται μόνο από την μια μονάδα.
Όπως είναι εμφανές από τα παραπάνω, το RAID 1 δεν προσφέρει καμία αύξηση σε απόδοση. Στον αντίποδα, εφόσον έχουμε μονάδες οι οποίες αποτελούν αντίγραφα μιας άλλης, τότε αυτές δεν συμβάλλουν ούτε στην αύξηση της χωρητικότητας της συστοιχίας. Με πολύ απλά λόγια, η μια μονάδα λειτουργεί πάντα ως «σκιά» της άλλης, και σε πραγματικές συνθήκες η μονάδα-«σκιά» δεν είναι διακριτή κατά την λειτουργία του συστήματος. Περιγράφοντας με μια μαθηματική φόρμουλα την συνολική χωρητικότητα της συστοιχίας, αν Xi η χωρητικότητα της μιας μονάδας, «n» το άθροισμα των χωρητικοτήτων των μονάδων και F η συνολική χωρητικότητα της συστοιχίας, τότε
Και τελικώς
Εφόσον το RAID 1 δεν εξυπηρετεί σε τίποτα το σύστημα, ούτε σε απόδοση αλλά ούτε σε χωρητικότητα, ποιο το πλεονέκτημά του; Από όσα εκφράσαμε νωρίτερα, τότε μπορούμε RAID 1 εξυπηρετεί μια fail-safe λειτουργία, έχοντας την ανοχή να χάσει 1 από τις 2 μονάδες χωρίς να υπάρξει απώλεια δεδομένων – βασιζόμενο στις πιθανότητες ότι είναι αρκετά απίθανο και τα 2 drives της συστοιχίας να αστοχήσουν ακριβώς την ίδια στιγμή. Εδώ όμως θα σημειώσουμε κάτι σημαντικό: Ο πλεονασμός δεδομένων δεν είναι το ίδιο με το back-up. Το RAID 1 θα σας δώσει την δυνατότητα να έχετε ένα πλήρες αντίγραφο, πχ του δίσκου λειτουργικού του συστήματός σας ώστε να μην έχετε σχεδόν καθόλου downtime. Για απολύτως κρίσιμα αρχεία τότε η λύση ακούει στο όνομα offsite back-up – γιατί σε περίπτωση, ας πούμε, μιας φυσικής καταστροφής, κανενός είδους RAID δεν μπορεί να σας σώσει.
Εφόσον λοιπόν καταλάβαμε τι είναι το RAID 1 και πως λειτουργεί, πάμε να δούμε τον τρόπο με τον οποίο θα στήσουμε μια τέτοια συστοιχία. Η λογική είναι πανομοιότυπη με αυτή του RAID 0 που περιγράψαμε νωρίτερα, αλλά όταν έρθει η ώρα τότε θα αλλάξουμε την επιλογή σε RAID 1.
Στην συγκεκριμένη περίπτωση θα χρησιμοποιήσουμε την δυνατότητα που μας παρέχει η ASRock Z170 Extreme7+ και του ενσωματωμένου ελεγκτή που βρίσκεται στο Z170 chipset.
Σημαντική προϋπόθεση: Η δημιουργία οποιουδήποτε array θα απαιτήσει και την οριστική διαγραφή των δεδομένων στα drives που θα χρησιμοποιηθούν. Για τον λόγο αυτό χρησιμοποιήστε άδειους δίσκους, ή δίσκους που δεν σας ενδιαφέρουν τα δεδομένα τους – εφόσον είσαστε σίγουροι για το τελευταίο.
Πάμε λοιπόν να δούμε τα βήματα:
Έχοντας ακολουθήσει τα βήματα της προετοιμασίας στην σελίδα 3, αφήνουμε το σύστημα να περάσει την αρχική οθόνη, μέχρι να εμφανιστεί εκείνη που μας δείχνει τις πληροφορίες της OpROM, και η οποία απαριθμεί τους εγκατεστημένους δίσκους του συστήματος. Εκεί πρέπει να πατήσουμε και τον συνδυασμό πλήκτρων Ctrl + I, ώστε να μεταβούμε στην πλατφόρμα Intel RST.
Από εδώ και πέρα τα πράγματα είναι αρκετά απλά. Διαλέγουμε την επιλογή Create RAID Volume και πατάμε Enter.
Στην επόμενη οθόνη μας εμφανίζονται και οι επιλογές για την δημιουργία ενός νέου RAID Volume. Το πρώτο βήμα είναι ο καθορισμός του ονόματος – που μπορείτε και να αφήσετε το προεπιλεγμένο εάν δεν σας ενδιαφέρει. Το αμέσως επόμενο βήμα είναι η επιλογή του RAID level, που στην συγκεκριμένη περίπτωση θα το αφήσουμε στο RAID1 (Mirror).
Αμέσως επόμενο βήμα είναι η επιλογή των δίσκων που θα αποτελέσουν την συστοιχία μας. Στην προκειμένη περίπτωση διαλέγουμε τους δίσκους που θέλουμε ώστε να τοποθετηθούν στο array.
Τελικό βήμα είναι η επιλογή του Create Volume. Θα χρειαστούν μόλις μερικά δευτερόλεπτα έως ότου το array να είναι έτοιμο προς χρήση!
Από εκεί και πέρα προχωράμε κανονικά με την εγκατάσταση του λειτουργικού. Επαναλαμβάνουμε πως αν ο εγκαταστάτης δεν αναγνωρίζει την συστοιχία, τότε μπορείτε να φορτώσετε τους απαιτούμενους drives από το DVD που συνοδεύει την μητρική σας.
Μέσα από όλες τις σελίδες που προηγήθηκαν εύχομαι να λάβατε όλη την απαραίτητη ενημέρωση για το RAID και πως μπορεί να σας χρησιμεύσει. Αν όχι, φτάσαμε στην τελευταία σελίδα όπου θα προσπαθήσω να εκφράσω τα συμπεράσματά μου μέσα από αυτόν τον οδηγό – διερευνητικό, το οποίο εύχομαι να σας φάνηκε χρήσιμο όσο και εμένα.
Δεν θα επεκταθώ περισσότερο στο RAID 1, καθώς όπως θα καταλάβατε από την συγκεκριμένη σελίδα, η συστοιχία αυτή δεν θα σας βοηθήσει στα θέματα απόδοσης, αλλά θα προσθέσει μια έξτρα «δικλείδα ασφαλείας» σε περίπτωση που ένα από τα drive αστοχήσει. Κατά κύριο λόγο το RAID 1 είναι χρήσιμο σε πιο «επισφαλή» drive, κοινώς τους μηχανικούς σκληρούς δίσκους οι οποίοι με τις συχνές εγγραφές έχουν μεγαλύτερες πιθανότητες να παρουσιάσουν bad sectors – το οποίο μπορεί να οδηγήσει από απώλεια δεδομένων μέχρι και ολοκληρωτική καταστροφή. Έχοντας έναν δίσκο ως «καθρέφτη» κάποιου άλλου, μας δίνεται η δυνατότητα για ευκολότερη ανάκτηση και συνεπώς λιγότερο downtime – κάτι το οποίο μπορεί να είναι σημαντικό σε επαγγελματικά συστήματα που πρέπει να λειτουργούν συνεχώς, και μια αστοχία μπορεί να οδηγήσει σε απώλεια όχι μόνο δεδομένων, αλλά και χρημάτων. Θα επαναλάβω για μια ακόμα φορά όμως, πως το RAID 1 δεν είναι ισοδύναμο του back-up! Τα κρίσιμα και σημαντικά σας δεδομένα θα πρέπει να τα έχετε δυο ή και περισσότερα αντίγραφα, και σε μια off-site τοποθεσία.
Όσον αφορά το RAID 0, εδώ τα πράγματα περιπλέκονται αρκετά περισσότερο, και ίσως τα αποτελέσματα να μην είναι αυτά ακριβώς που περιμένατε. Κάποια από τα νούμερα σίγουρα είναι εντυπωσιακά, καθώς στις σειριακές εγγραφές είδαμε διαμεταγωγές που έφτασαν ακόμα και το 1GB ανά δευτερόλεπτο. Είναι όμως αυτό ένα ρεαλιστικό σενάριο; Σε ένα απλό καθημερινό σύστημα, το σύνηθες workload μπορεί να αποτελείται από web browsing, παιχνίδια, αναπαραγωγή βίντεο και γενικά διάφορες απλές εργασίες. Εκεί, το I/O performance ενός απλού δίσκου είναι υπέρ-αρκετό. Είδαμε εξάλλου όλες τις περιπτώσεις, και ειδικά στην εγγραφή μικρών αρχείων, όπου το RAID 0 δεν μας δίνει σχεδόν κανένα εμφανές πλεονέκτημα έναντι ενός δίσκου. Επιπλέον, τα boot times και load times επίσης δεν έδειξαν αρκετές διαφορές, τόσες ώστε κάποιος να μπορεί να διακρίνει την διαφορά σε ένα τυφλό τεστ.
Ένα stripped array (RAID 0) έχει την κατάλληλη διάταξη ώστε να προσφέρει τα μέγιστα δυνατά IOPS – αλλά κάτι τέτοιο συμβαίνει μόνο όταν προσθέτουμε εντολές με βάθος μεγαλύτερο από 4. Φτάνοντας σε βάθος εντολών 8, 16 ή και 32 μιλάμε για ένα ιδιαιτέρως σπάνιο workload, το οποίο πολύ δύσκολα θα εμφανιστεί σε ένα τυπικό καθημερινό σύστημα. Υπάρχουν όμως και οι περιπτώσεις όπου το σενάριο απαιτεί την επεξεργασία μεγάλων project – όπως για η επεξεργασία HD video- ή η μεταφορά μεγάλων αρχείων, κοινώς οτιδήποτε απαιτεί μεγάλο I/O performance , είναι και το όπου το RAID 0 αρχίζει να ξεδιπλώνει τις χάρες του.
«Ένα 480GB drive ή δύο των 280GB»; Βάση των παραπάνω, η απάντηση είναι απλή: Απλά αγοράστε ένα από το μεγαλύτερο. Συνυπολογίζοντας και τον παράγοντα «κόστος» στο όλο εγχείρημα, αυτό που θα συναντήσετε είναι πως το drive μεγαλύτερης χωρητικότητας θα σας κοστίσει περίπου το ίδιο ή και ελαφρώς λιγότερο, σε σχέση με την αγορά δυο μικρότερων μονάδων. Από την άλλη, για όσους τους περιορίζει το όριο των 500 MB/s του SATA 3, έχοντας ιδιαίτερες απαιτήσεις από την απόδοση της μονάδας αποθήκευσης και δουλεύουν πάνω σε απαιτητικά projects, ίσως το RAID 0 να είναι μια απλή και οικονομική λύση για μεγαλύτερο performance.
Πηγές: Θα προσθέσω
Ήταν η μέρα στην οποία κατέφτασε στο HwBox lab μια στοίβα από SSD. Οι 4 εκ των οποίων προοριζόταν για τις ανάγκες των συστημάτων δοκιμών του εργαστηρίου. Κάπως έτσι, κινούμενος πάντα υπό το μότο “ποτέ το σύστημά μου δεν είναι το πιο γρήγορο, ποτέ μια οθόνη δεν είναι αρκετή και ποτέ ένας δίσκος δεν μου φτάνει”, άρχισε να με τρώει η περιέργεια. Πως μπορώ να τους χρησιμοποιήσω όλους μαζί; Πως μπορώ να πάρω ακόμα περισσότερη ταχύτητα από αυτήν που με περιορίζει το SATA 3, και πως μπορώ να έχω ένα επίπεδο προστασίας σε περίπτωση που κάποιος χαλάσει; Μα πάνω απʼ όλα, αξίζει τον κόπο;
Η απάντηση είναι σχεδόν μονόδρομος, και ακούει στο όνομα RAID.
Οι συστοιχίες δίσκων δεν είναι κάτι καινούριο στον χώρο τον υπολογιστών, αντιθέτως βρίσκουν την εφαρμογή τους εδώ και αρκετές δεκαετίες κυρίως στην βιομηχανία. Γυρίζοντας πίσω τον χρόνο στο 1987, που πικραίνει τον γράφοντα κάθε φορά που κάποιος το αποκαλεί «μακρινό», τρεις μηχανικοί του Πανεπιστημίου Berkeley στην California, εν ονόματι David Patterson, Garth A. Gibson και Randy Katz στο έργο τους "A Case for Redundant Arrays of Inexpensive Disks” εφευρίσκουν τον όρο RAID, με τον κύριο ισχυρισμό τους να είναι πως μια συστοιχία από φτηνούς δίσκους μπορεί να κερδίσει σε απόδοση τις ακριβές – για τότε - μονάδες των mainframes, επιτυγχάνοντας εξίσου και μεγαλύτερη αξιοπιστία και συμβάλλοντας δραματικά στην μείωση του κόστους για τις, ολοένα αυξανόμενες, ανάγκες αποθήκευσης. Δεν πέρασαν παρά μόνο 2 χρόνια ώστε η βιομηχανία να συμφωνήσει σε μερικά standards που θα εφαρμόζονταν στην πλειοψηφία των επαγγελματικών συστημάτων, παρουσιάζοντας το ολοκληρωμένο πρότυπο RAID.
Επαναφορά ξανά πίσω στις μέρες μας, όπου και ο όρος “Inexpensive” αντικαταστάθηκε με τον όρο Independent, μιας και πλέον το κόστος των μέσων αποθήκευσης έχει μειωθεί δραματικά την τελευταία 15ετία. Επιπλέον, η πρόοδος στην αρχιτεκτονική υπολογιστών και στις μεθόδους ολοκλήρωσης καθώς και η μείωση του κόστους των απαραίτητων ελεγκτών, έχει καταστήσει δυνατή την ενσωμάτωση μονάδων RAID σε μια μεγάλη μερίδα των motherboards που κυκλοφορούν στην αγορά. Δεν θα μπορούσαμε να βρούμε καλύτερη ευκαιρία από το να αξιοποιήσουμε αυτό το χαρακτηριστικό που οι περισσότεροι έχουμε στα PC μας.
Internal disclaimer: Πολλές από τις παρακάτω αναφορές δεν είναι απαραίτητα και σωστές. Όμως το guide γίνεται με σκοπό την ενημέρωση του αρχάριου, και γιʼ αυτό κάποιες έννοιες έχουν απλοποιηθεί ώστε να είναι πιο ευκολονόητες.
Πριν περάσουμε στην πράξη, αξίζει να κάνουμε μια σύντομη στάση στην θεωρία και τις βασικές έννοιες. Το RAID αποτελεί μέρος μιας γενικότερης κατηγορίας, αυτήν που ονομάζουμε ως «Συστοιχία Δίσκων» (Disk Array). Μια συστοιχία δίσκων είναι επί της ουσίας ένα σύστημα αποθήκευσης δεδομένων, το οποίο αποτελείται από πολλαπλές μονάδες δίσκων και μνήμης cache, σχηματίζοντας έτσι μια εικονική «δεξαμενή αποθήκευσης» (storage pool), η οποία παρουσιάζεται στο λειτουργικό σύστημα ως μια ενιαία μονάδα αποθήκευσης, και η οποία δεν ενδιαφέρεται για το είδος του συστήματος αρχείων και των δεδομένων που θα εγγραφτούν προς αυτή. Ο στόχος είναι απλός: μέσω μιας αποτελεσματικής διανομής των δεδομένων προς τις μονάδες αποθήκευσης, η συστοιχία προσπαθεί να επιτύχει ανοχή στα σφάλματα ακόμα και μετά από απώλεια μονάδων, καθώς και μεγαλύτερη ταχύτητα.
Βέβαια, αυτό δεν είναι κάτι απλό. Για να επιτευχθεί κάτι τέτοιο, απαιτείται ένας εξειδικευμένος ελεγκτής ο οποίος αναλαμβάνει ως υπεύθυνος διαχείρισης της διανομής των δεδομένων, καθώς και τον αντίστροφο δρόμο για την «ερμηνεία» των δεδομένων προς το λειτουργικό σύστημα. Αυτό οφείλεται κυρίως στο γεγονός πως τα περισσότερα είδη συστοιχιών εισάγουν, όπως είπαμε νωρίτερα, και ανοχή σφαλμάτων – πράγμα που σημαίνει πως απαιτείται επιπλέον μορφή πληροφορίας η οποία θα αποθηκευτεί στο array, και η οποία θα είναι χρήσιμη ώστε σε περίπτωση απώλειας κάποιας μονάδας, να είναι δυνατή η ανάκτηση των χαμένων δεδομένων. Προς το παρόν δεν θα αγγίξουμε περισσότερο αυτό το θέμα, μιας και δεν θα ασχοληθούμε με τόσο πολύπλοκα arrays – αν παρʼ όλα αυτά αν το θέλετε και σεις, δείξτε μας το ενδιαφέρον σας και θα προσπαθήσουμε να σας καλύψουμε!
Συνεχίζοντας με την μικρή εισαγωγή στην θεωρία, θα σταθούμε στον θέμα του ελεγκτή. Όπως είπαμε και νωρίτερα η χρήση ενός ελεγκτή είναι απαραίτητη για την δημιουργία μιας συστοιχίας, όμως δεν είναι απαραίτητη πάντα η «φυσική» του παρουσία. Για να το θέσουμε με πιο απλά λόγια, η δημιουργία ενός array μπορεί να γίνει μέσω 2 τρόπων: είτε Software-based, είτε hardware-based. Ξεκινώντας με τον δεύτερο, την θέση του ελεγκτή αναλαμβάνει μια συγκεκριμένη μονάδα την οποία θα την συναντήσουμε είτε πάνω στην μητρική, είτε σε κάποια μορφή κάρτας επέκτασης – όπως για παράδειγμα μια επιπρόσθετη κάρτα που παρέχει περισσότερες SATA θύρες. Για την πρώτη περίπτωση, δεν είναι αναγκαία η ύπαρξη ελεγκτή, αλλά είναι δυνατή η δημιουργία συστοιχίας μέσω εξειδικευμένων προγραμμάτων, τα οποία επιτυγχάνουν το array σε επίπεδο λογισμικού (software layer). Όμως, σε οτιδήποτε έχει να κάνει με εξομοίωση λειτουργιών μέσω λογισμικού, όλον το υπολογιστικό φόρτο τον χρεώνεται ο κεντρικός επεξεργαστής - κάτι το οποίο μπορεί να έχει δραματικές επιπτώσεις στην συνολική ταχύτητα του συστήματος μιας και χρησιμοποιούνται αρκετοί πόροι του. Αντίθετα, ένας hardware controller αναλαμβάνει να πάρει όλο το workload από τον επεξεργαστή, αλλά εναπόκειται στην ταχύτητα του συγκεκριμένου controller η απόδοση της συστοιχίας.
[B]Enter the RAID[/B]
Οι συστοιχίες αποτελούν μια τελείως γενική έννοια. Εφόσον λοιπόν πήρατε μια σφαιρική ενημέρωση για τα arrays, ήρθε η ώρα να δούμε και μερικά πράγματα για το πρωτόκολλο το οποίο κάνει πράξη τα όσα αναφέραμε παραπάνω.
Ο όρος RAID αποτελεί μια συντομογραφία του Redundant Array of Independent Disks, είτε Ελληνιστί «Πλεονάζουσα Συστοιχία Ανεξάρτητων Δίσκων». Ο όρος που θα ξεχωρίσουμε είναι ο “redundant”, και επί της ουσίας υπαινίσσεται πως η συστοιχία προσφέρει «πλεονασμό δεδομένων» για εύκολη ανάκτηση σε περίπτωση αποτυχίας, όπως αναφέραμε και νωρίτερα – αν και αυτό δεν είναι απαραίτητο σε όλες τις περιπτώσεις. Και ενώ λοιπόν η έννοια της συστοιχίας είναι πολύ γενική, το RAID είναι το πρωτόκολλο το οποίο περιγράφει ακριβώς τους τρόπους και τις δομές δεδομένων, με τα οποία θα δημιουργηθεί και θα λειτουργεί το array.
Επειδή υπάρχουν διαφορετικές ανάγκες και απαιτήσεις από κάθε συστοιχία, δημιουργήθηκαν και διαφορετικές μορφές RAID, γνωστές και ως «Επίπεδα του RAID» (Standard RAID levels). Αν και στην αρχή δημιουργήθηκαν 5 στάνταρ επίπεδα, με το πέρασμα των χρόνων έχουν δημιουργηθεί αρκετά περισσότερα, με κάποια από αυτά όμως να μην χρησιμοποιούνται πλέον στην βιομηχανία, ενώ άλλα είναι proprietary μορφής και απαιτούν εξειδικευμένο εξοπλισμό.
Ας δούμε λοιπόν μερικά από τα πιο διαδεδομένα RAID levels:
- RAID 0 (Striping): Αν και αποτελεί ένα non-standard επίπεδο, το RAID 0 μπορεί να δημιουργηθεί με την χρήση απλών RAID ελεγκτών. Ο κύριος στόχος του είναι η μέγιστη απόδοση, και για να το πετύχει αυτό διανέμει τα δεδομένα σε λωρίδες ανάμεσα στις μονάδες. Η συνολική χωρητικότητα της συστοιχίας είναι όσο το σύνολο των δίσκων, αλλά αξίζει να σημειωθεί πως δεν παρέχει κανένα επίπεδο ασφάλειας, και σε περίπτωση βλάβης όλα τα δεδομένα χάνονται. Για το RAID 0 θα επεκταθούμε αναλυτικότερα σε επόμενη σελίδα.
- RAID 1 (Mirroring): Το πρώτο στάνταρ επίπεδο σχεδιάστηκε για μεγαλύτερη ασφάλεια. Επί της ουσίας το RAID 1 βασίζεται στην δημιουργία ενός ένα-προς-ένα (1:1) αντιγράφου των δεδομένων μιας μονάδας σε μια δεύτερη. Η συνολική χωρητικότητα του array είναι η μισή του συνόλου των δίσκων, αλλά αν μια μονάδα αποτύχει, τότε η δεύτερη έχει τα ίδια δεδομένα ακριβώς. Για το RAID 1 θα επεκταθούμε σε επόμενη σελίδα.
- RAID 2, 3: Δυο ξεπερασμένες μορφές του RAID. Τα RAID 2 και 3 είναι τα πρώτα επίπεδα τα λύνουν το πρόβλημα της χωρητικότητας, αλλά για να το επιτύχουν αυτό εισάγουν την έννοια των ψηφίων ισοτιμίας (parity). Βάση των οποίων, αν μια από τις μονάδες αποτύχει, τότε οι εναπομείναντες πληροφορίες σε συνδυασμό με τα ψηφία ισοτιμίας αρκούν ώστε ο ελεγκτής να «μαντέψει» με ακρίβεια τα δεδομένα που λείπουν. Τα RAID 2 και 3 λειτουργούν με βάση τον διαχωρισμό (stripping) των δεδομένων σε επίπεδο bit (RAID 2) και byte (RAID 3), ενώ χρησιμοποιούν μια έξτρα μονάδα για την αποθήκευση των parity bits. Όμως, λόγω του χαμηλού I/O performance, αυτές οι μορφές έχουν εγκαταλειφθεί για χάρη πιο αποτελεσματικών λύσεων.
- RAID 4: Το τέταρτο επίπεδο είναι η φυσική εξέλιξη των προηγούμενων 2. Το RAID 4 βασίζεται στην ίδια λογική των προηγούμενων 2, αλλά αυτήν την φορά τα δεδομένα διαχωρίζονται σε μεγαλύτερα block και όχι σε bit και byte. Επιπλέον, χρησιμοποιείται ένας επιπλέον δίσκος για την αποθήκευση των ψηφίων ισοτιμίας, γνωστό και ως Parity Disk. Μέσω της τεχνικής που χρησιμοποιεί, οι ταυτόχρονες αναγνώσεις είναι δραματικά βελτιωμένες. Είναι εμφανές όμως πως ο ελάχιστος αριθμός δίσκων πρέπει να ανέρχεται σε 3. Το RAID 4 δύσκολα συναντάται και αυτό πλέον, καθώς προτιμάται το πιο αποτελεσματικό RAID 5.
- RAID 5: Η αμέσως επόμενη εξέλιξη του RAID 4, το RAID 5 χρησιμοποιεί την ίδια λογική με αυτή του 4, όμως αυτήν την φορά τα parity bits κατανέμονται ισότιμα σε κάθε δίσκο, χωρίς να απαιτείται ένας συγκεκριμένος για την αποθήκευσή τους. Οι ισότιμες πληροφορίες κατανέμονται με έναν έξυπνο τρόπο, ώστε σε πιθανή απώλεια κάποιου δίσκου να είναι δυνατή η ανάγνωση των δεδομένων από τους υπόλοιπους. Το RAID 5 προσφέρει ακόμα περισσότερη απόδοση σε σχέση με το 4, αλλά έχει ανοχή σε μόνο μια απώλεια δίσκου. Κατά την απώλεια, το array θα πρέπει να επαναδομηθεί (rebuild). Επιπλέον, υπάρχει σημαντικός κίνδυνος κατά την επανάκτηση του array, καθώς θα πρέπει να αναγνωστούν οι υπόλοιποι δίσκοι ξανά ώστε να εγγραφτεί εκ νέου ο νέος δίσκος – κάτι το οποίο απαιτεί χρόνο και αφήνει τους υπολειπόμενους δίσκους ανοιχτούς στον κίνδυνο της αστοχίας κατά το rebuild.
- RAID 6: Το έκτο επίπεδο δεν διαφέρει και πολύ σε σχέση με το πέμπτο, μόνο που αυτήν την φορά έχουμε και δεύτερη πλεονάζουσα πληροφορία. Αυτό δίνει το δικαίωμα στο array να χάσει έως 2 δίσκους, αλλά αυξάνει ταυτόχρονα τον ελάχιστο αριθμό τους από τρεις σε τέσσερις.
[B]Εμφωλευμένα / Υβριδικά RAID (Nested / Hybrid RAID)[/B]
Τα παραπάνω RAID επίπεδα μπορούν και να συνδυαστούν μεταξύ τους – έτσι μπορούμε να δημιουργήσουμε RAID μεταξύ RAID συστοιχιών. Για παράδειγμα, μπορούμε να δημιουργήσουμε ένα RAID 0 από ένα RAID 1 ή και το ανάποδο, αλλά δεν μπορούμε να πάμε βαθύτερα από δυο επίπεδα – άλλωστε κάτι τέτοιο θα περιπλέξει αρκετά την συστοιχία μας. Το τελικό array ονομάζεται και σαν “top array”, ενώ στο παράδειγμά μας αποκαλείται ως RAID 1 + 0. Μερικοί κατασκευαστές τείνουν να αφαιρούν το σύμβολο «+» από την τελική ονομασία, καταλήγοντας στο RAID 10 – όμως οτιδήποτε παραπάνω από το RAID 6 είναι ένα εμφωλευμένο RAID.
Ας δούμε μερικά από τα πιο γνωστά παραδείγματα:
- RAID 0 + 1: Δημιουργεί έναν καθρέφτη ενός RAID 0 array. Η συστοιχία μπορεί να ανεχτεί μόνο μια απώλεια από κάθε πλευρά του array.
- RAID 1 + 0: Δημιουργεί ένα RAID 0 από μια συστοιχία RAID 1 δίσκων. Η συστοιχία μπορεί να συνεχίσει να λειτουργεί έως ότου να χαθούν όλοι δίσκοι-κλώνοι.
[B]Άλλες μορφές συστοιχιών[/B]
Αφήνοντας στην άκρη τα software-based arrays, υπάρχει και άλλη μια μορφή συστοιχίας η οποία δεν κατατάσσεται στο RAID πρότυπο. Πρόκειται για το γνωστό μας JBOD, το οποίο είναι και μια συντομογραφία του “Just a bunch of disks” («απλώς μια στοίβα δίσκων»). Το συγκεκριμένο array δεν κάνει τίποτα περισσότερο από το να προσφέρει το σύνολο της χωρητικότητας μερικών δίσκων, ανεξαρτήτου χωρητικότητας. Έτσι μπορούμε να πάρουμε μερικούς δίσκους Α, Β και Γ και με την χρήση του JBOD να έχουμε ένα array συνολικής χωρητικότητας Χ=Α+Β+Γ – δηλαδή την μέγιστη χωρητικότητα, σε αντίθεση με τα διάφορα επίπεδα του RAID που προκύπτει λιγότερη σε σχέση με το σύνολο που μπορούν να προσφέρουν όλοι οι δίσκοι. Εδώ όμως θα πρέπει να σημειώσουμε πως το JBOD δεν προσφέρει καμία απολύτως βελτίωση ούτε σε θέματα απόδοσης, ούτε και σε θέματα αξιοπιστίας – πράγμα που σημαίνει πως θα πρέπει να αποφεύγεται αν τα δεδομένα που πρόκειται να εγγραφτούν είναι σημαντικά. Επίσης, οι περισσότεροι controllers δεν προσφέρουν δυνατότητα για JBOD, το οποίο θα το συναντήσουμε μόνο σε software επίπεδο.
Προετοιμασία
O βασικός storage controller της μητρικής μας βρίσκεται ενσωματωμένος στο Intel PCH. Σε αρκετές περιπτώσεις υπάρχει και δεύτερος συμπληρωματικό ελεγκτής που παρέχει τις παραπάνω από τις 6 SATA θύρες που μπορεί να διαχειριστεί το PCH. Πριν ξεκινήσουμε λοιπόν, θα πρέπει να συμβουλευτούμε το εγχειρίδιο της μητρικής μας ώστε να αναγνωρίσουμε ποιες θύρες ελέγχει ο εκάστοτε controller, και ο λόγος είναι ότι θα πρέπει να συνδέσουμε τους δίσκους μας πάνω στον ίδιο ελεγκτή. Στην πλειοψηφία των περιπτώσεων ισχύει πως οι πρώτες δυο θύρες (SATA_0 και SATA_1) ανήκουν στον Intel PCH, αλλά καλό θα ήταν να το επαληθεύσουμε μέσα από το userʼs manual.
Έχοντας τα πάντα έτοιμα, ήρθε η ώρα για τις βασικές ρυθμίσεις. Η μητρική που χρησιμοποιούμε στο παράδειγμά μας είναι η ASRock Z170 Extreme7+ παρέα με έναν Core i7 6700K και 4x4GB Corsair Dominator Platinum, ενώ τα drives που θα χρησιμοποιήσουμε στις δοκιμές μας πρόκειται για ένα ζευγάρι από OCZ Arc 100 χωρητικότητας 240 GB έκαστο.
Σημαντικό: Η δημιουργία οποιουδήποτε array θα απαιτήσει και την οριστική διαγραφή των δεδομένων στα drives που θα χρησιμοποιηθούν. Για τον λόγο αυτό χρησιμοποιήστε άδειους δίσκους, ή δίσκους που δεν σας ενδιαφέρουν τα δεδομένα τους – εφόσον είσαστε σίγουροι για το τελευταίο.
Βασική προϋπόθεση είναι η ρύθμιση του ελεγκτή ώστε να λειτουργεί σε RAID mode. Εξʼ ορισμού η προεπιλογή είναι το AHCI mode, οπότε θα πρέπει να μεταβούμε στις ρυθμίσεις του BIOS και να το αλλάξουμε. Έτσι, μετά το αρχικό boot πατάμε το πλήκτρο Delete (ή το F2) και εισερχόμαστε στο UEFI BIOS. Από εκεί μεταβαίνουμε στην καρτέλα Storage Configuration, όπου είμαστε σε θέση να τροποποιήσουμε τις ρυθμίσεις του ελεγκτή δίσκων του Intel Z170.
Στην επιλογή SATA Mode, παρατηρούμε πως η default επιλογή είναι το AHCI. Από εκεί διαλέγουμε την επιλογή RAID. Αυτή η επιλογή θα ενεργοποιήσει την εκκίνηση της ειδικής OpROM η οποία είναι υπεύθυνη για την δημιουργία και διαχείριση του RAID. Πιο συγκεκριμένα, αυτή η OpROM συγκαταλέγεται στην πλατφόρμα Intel Rapid Storage Technology, που είναι και η πλατφόρμα για την διαχείριση των array.
Με το πλήκτρο F10 αποθηκεύουμε τις αλλαγές μας. Το κρατάει τις ρυθμίσεις μας και επανεκκινεί.
The RAID 0
Ως γνωστόν, ένα σύστημα θεωρείται τόσο αργό, όσο το πιο αργό κομμάτι του. Μέχρι σήμερα, το πιο αργό κομμάτι ενός υπολογιστή είναι και το αποθηκευτικό του κομμάτι, καθώς στην συντριπτική του πλειοψηφία η συνήθης διαμεταγωγή δεδομένων περιορίζεται σε εκατοντάδες MB ανά δευτερόλεπτα, την ώρα που στα υπόλοιπα υποσυστήματα η κλίμακα κινείται στην τάξη των δεκάδων GB/s.
Πάμε λοιπόν να δούμε την πρώτη μορφή για RAID μεταξύ δίσκων. Η συγκεκριμένη διάταξη είναι και η πιο διαδεδομένη για τους home users, και έκανε θραύση αρκετά την εποχή όπου κυριαρχούσαν οι μηχανικοί δίσκοι ως OS drive. Ο λόγος είναι πολύ απλός: το σημαντικό throughput performance που προσφέρει, καθώς και καμία απώλεια χωρητικότητας, βελτίωσαν σημαντικά τις επιδόσεις του συστήματος. Στις μέρες μας, και με την χρήση των σύγχρονων SSD, το RAID 0 δεν είναι και τόσο διαδεδομένο, παρʼ όλα αυτά ένας καλός συνδυασμός μπορεί να επιφέρει ακόμα περισσότερη βελτίωση στην απόδοση του συστήματος.
Πως λειτουργεί; Η λογική είναι απλή. Το RAID 0 σχηματίζει ένα storage pool μεταξύ των δίσκων, και αναλαμβάνει να διαχωρίσει τα δεδομένα ισότιμα μεταξύ των δίσκων, διαχωρίζοντάς τα σε «λωρίδες» (stripes). Τα stripes μπορούν να έχουν μεγέθη που κυμαίνονται από τα 4 έως και τα 128 kilobytes. Τα μικρά μεγέθη stripes εξυπηρετούν σε απόδοση όταν οι εγγραφές αφορούν μικρά αρχεία, ενώ τα μεγαλύτερα ευνοούν την αποθήκευση μεγάλων αρχείων. Η ανάγνωση των δεδομένων γίνεται με παρόμοιο τρόπο, με τον κεντρικό ελεγκτή να διαβάζει ταυτόχρονα και από τις δυο (ή και παραπάνω) μονάδες τα δεδομένα (λωρίδες) και να συνθέτει το τελικό, ολοκληρωμένο αποτέλεσμα. Η ταυτόχρονη ανάγνωση αλλά και εγγραφή δεδομένων από και προς διαφορετικές μονάδες, αυξάνει δραματικά το I/O performance, με το scaling να έχει την δυνατότητα να φτάσει μέχρι και το 100% - για παράδειγμα δυο drives σε RAID 0 μπορούν να έχουν διπλάσια απόδοση από την μια μονάδα μόνη της.
Το παραπάνω σχηματικό απεικονίζει συνοπτικά την διανομή των δεδομένων μεταξύ δυο δίσκων σε RAID 0. Όπως είναι εμφανές, τα δεδομένα διαχωρίζονται κατά τέτοιον τρόπο ώστε να είναι δυνατή η ταυτόχρονη ανάγνωση και εγγραφή και από τις δυο μονάδες, με τον διαθέσιμο χώρο να ορίζεται από τον εξής τύπο: Αν “F” είναι το μέγεθος του array, και “n” η χωρητικότητα της μιας μονάδας μας, εφόσον πρόκειται να τότε προκύπτει:
Που ισούται με το άθροισμα των χωρητικοτήτων των drive, αρκεί αυτά να είναι ίσης χωρητικότητας.
«Ναι, αλλά τι γίνεται αν έχω δυο διαφορετικά drive, με διαφορετικές χωρητικότητες»; Η απάντηση είναι απλή.
Στην περίπτωση αυτή η δημιουργία του RAID 0 είναι δυνατή, με το array που θα δημιουργηθεί να είναι ίσο με 2 φορές την χωρητικότητα του μικρότερου από τους δύο, ενώ
... η διαφορά τους “D” θα παραμείνει ένας κενός και ανεκμετάλλευτος χώρος. Επιπλέον, η ταχύτητα του array θα ισοδυναμεί με την ταχύτητα του πιο αργού εκ των δυο drive. Συνεπώς, το RAID 0 είναι δυνατό σε μια τέτοια περίσταση, αλλά δεν συνίσταται.
Όμως εδώ θα πρέπει να τονίσουμε το εξής: Δεν υπάρχει καμία απολύτως πρόβλεψη για πλεονάζουσα πληροφορία – κάτι που αν το ερμηνεύσουμε σημαίνει πως αν οποιοδήποτε από τα drives του array αποτύχει, τότε το array καταστρέφεται και δεν υπάρχει απολύτως καμία δυνατότητα ανάκτησης της χαμένης πληροφορίας. Για τον λόγο αυτό, το RAID 0 συνίσταται μόνο για αποθήκευση μη σημαντικής πληροφορίας, όπως το λειτουργικό σύστημα και τα προγράμματα. Αν θέλετε να κρατήσετε σημαντικά δεδομένα, τότε θα πρέπει να κοιτάξετε σε άλλες διατάξεις, και φυσικά back-ups!
Ολοκληρώνοντας την θεωρία, ας δούμε και την πράξη. Στην συγκεκριμένη περίπτωση θα χρησιμοποιήσουμε την δυνατότητα που μας παρέχει η ASRock Z170 Extreme7+ και του ενσωματωμένου ελεγκτή που βρίσκεται στο Z170 chipset.
Πάμε λοιπόν να δούμε τα βήματα:
Έχοντας κάνει τις απαιτούμενες ρυθμίσεις που εξηγήσαμε στην προηγούμενη σελίδα, αφήνουμε το σύστημα να περάσει την αρχική οθόνη, μέχρι να εμφανιστεί εκείνη που μας δείχνει τις πληροφορίες της OpROM, και η οποία απαριθμεί τους εγκατεστημένους δίσκους του συστήματος. Εκεί πρέπει να πατήσουμε και τον συνδυασμό πλήκτρων Ctrl + I, ώστε να μεταβούμε στην πλατφόρμα Intel RST.
Από εδώ και πέρα τα πράγματα είναι αρκετά απλά. Διαλέγουμε την επιλογή Create RAID Volume και πατάμε Enter.
Στην επόμενη οθόνη μας εμφανίζονται και οι επιλογές για την δημιουργία ενός νέου RAID Volume. Το πρώτο βήμα είναι ο καθορισμός του ονόματος – που μπορείτε και να αφήσετε το προεπιλεγμένο εάν δεν σας ενδιαφέρει.
Το αμέσως επόμενο βήμα είναι η επιλογή του RAID level, που στην συγκεκριμένη περίπτωση θα το αφήσουμε στο RAID0 (Stripe).
Αμέσως επόμενο βήμα είναι η επιλογή των δίσκων που θα αποτελέσουν την συστοιχία μας. Στην προκειμένη περίπτωση διαλέγουμε τους δίσκους που θέλουμε ώστε να τοποθετηθούν στο array.
Επόμενο βήμα είναι η επιλογή του μεγέθους του stripe. Εδώ έχουμε αρκετές επιλογές, αλλά και η default των 16ΚΒ αποτελεί μια αρκετά καλή λύση για συνδυασμό σε OS drives, το οποίο αποθηκεύει τόσο μεγάλα όσο και μικρά αρχεία. Στο παράδειγμα της φωτογραφίας χρησιμοποιήσαμε 64KB stripe, μόνο χάρην παραδείγματος. Πιο αναλυτικά στην απόδοση των stripes θα επεκταθούμε σε επόμενη σελίδα.
Τελικό βήμα είναι η επιλογή του Create Volume. Θα χρειαστούν μόλις μερικά δευτερόλεπτα έως ότου το array να είναι έτοιμο προς χρήση!
Αυτό ήταν! Από εκεί και πέρα προχωράμε κανονικά με την εγκατάσταση του λειτουργικού μας συστήματος, όπως ακριβώς θα κάναμε με οποιονδήποτε δίσκο. Εδώ θα σημειώσουμε το εξής: αν η Εγκατάσταση δεν αναγνωρίζει την ύπαρξη δίσκου, τότε θα χρειαστεί να φορτώσουμε κάποιους επιπλέον drivers οι οποίοι συνήθως βρίσκονται στο συνοδευτικό DVD της μητρικής.
Το RAID 0 μας είναι έτοιμο! Για περισσότερη ανάλυση στην απόδοση του RAID 0, ακολουθεί στην επόμενη σελίδα.
Benchmarking
Εφόσον λοιπόν διαλέξατε την διάταξη για RAID 0, υπάρχουν μερικές λεπτομέρειες που πρέπει να διευκρινιστούν. Ποια είναι ακριβώς τα οφέλη, τι κερδίζετε και τι χάνετε, ενώ θα προσπαθήσουμε να δούμε και τις διαφορές που υπάρχουν ανάμεσα στα διάφορα μεγέθη των stripe. Το μέγεθος του κάθε stripe κυμαίνεται από τα 4KB μέχρι και τα 128KB, θα προσπαθήσουμε όμως να αναλύσουμε ποιες είναι οι διαφορές μεταξύ τους
Για να κάνουμε την περαιτέρω ανάλυση, θέσαμε την συστοιχία μας σε μερικά από τα πιο γνωστά storage benchmarks. Επιλέξαμε ανάμεσα στα 3 δημοφιλή stripe sizes, εκείνα των 16, 64 και 128 και τα συγκρίνουμε με την απόδοση ενός μονού drive.
Ξεκινάμε με την δημοφιλή σουίτα της Anvil.
Για αρχή, αυτό που ξεχωρίζει είναι η τεράστια διαφορά στις σειριακές αναγνώσεις, όπου εκεί παρατηρήσαμε επιδόσεις σχεδόν διπλάσιες διαμεταγωγές σε σχέση με το απλό drive. Τα πράγματα περιπλέκονται λίγο όταν αρχίζουν οι random αναγνώσεις αρχείων, εκεί όπου όσο μικραίνει το μέγεθος του block της πληροφορίας, τόσο οι επιδόσεις φτάνουν τα επίπεδα ενός μονού δίσκου.
Τα ίδια παρατηρούμε και στις εγγραφές. Από τις πρώτες μας πληροφορίες, βλέπουμε πως η βέλτιστη λύση είναι το 16KB μέγεθος stripe το οποίο αποδίδει εξίσου καλά στις περισσότερες περιπτώσεις, με εκείνο των 128KB να δείχνει πως ευνοεί αρκετά τις σειριακές αναγνώσεις και εγγραφές μεγάλων αρχείων.
Συνεχίζουμε με το AS SSD.
Και σε αυτήν την περίπτωση λαμβάνουμε τα ίδια αποτελέσματα. Λαμπρές οι επιδόσεις σε σειριακές εγγραφές, ικανοποιητική αύξηση σε random αναγνώσεις με μεγάλο queue depth, όμως σε μια απλή ανάγνωση 4Κ τα κέρδη είναι μηδαμινά.
Το CrystalDiskMark μας δίνει μια άλλη εκδοχή, του ίδιου όμως νομίσματος. Εδώ γίνεται εμφανές πως τα υψηλότερα IOPS που προσφέρει μια τέτοια συστοιχία ευνοεί πάρα πολύ τις διαμεταγωγές με μεγάλο queue depth. Από την άλλη, αρχίζει να γίνεται ξεκάθαρο πως οι διαφορές μεταξύ των stripe sizes είναι από μικρές έως αμελητέες, με την πιο λογική επιλογή να δείχνει αυτή των 16Κ.
Από αριστερά προς τα δεξιά παραδίδουμε τα αποτελέσματα στο ATTO Disk Benchmark από 1 drive, 16K RAID 0 και 64Κ RAID 0. Τα βέλτιστα δυνατά εμφανίζονται στην ενδιάμεση επιλογή, όπως αναφέραμε και νωρίτερα.
Από την άλλη πλευρά, το PCMark 7 προσπαθεί να μας δώσει ένα πιο ρεαλιστικό σενάριο χρήσης. Και εδώ είναι που θα διαπιστώσουμε πως αρκετές από τις απλές και καθημερινές εργασίες δεν επωφελούνται ιδιαίτερα από μια διάταξη RAID 0.
Κλείνοντας, ας ρίξουμε και μια ματιά στα boot times. Εδώ παρατηρούμε πως είτε έχουμε SSD είτε RAID 0, οι διαφορές δεν είναι καθόλου εμφανείς. Για την ακρίβεια, η χρήση ενός και μόνου SSD μπορεί να βελτιώσει δραματικά αυτό το κομμάτι, από εκεί και πέρα όμως είναι ελάχιστα τα πράγματα που μπορούμε να κάνουμε ώστε το σύστημα μας να είναι ακόμα ταχύτερο κατά το boot.
Συμπερασματικά, πήρατε μια πολύ καλή ματιά το τι είναι το RAID 0 και που εξυπηρετεί. Σε γενικές γραμμές θα λέγαμε πως οι διαφορές εμφανίζονται σε πολύ συγκεκριμένα σενάρια χρήσης, με τα πιο απλά και καθημερινά να δείχνουν πως δεν επωφελούνται από μια τέτοια διάταξη. Όσο για τα stripe sizes; Ότι και αν τελικά διαλέξετε, οι διαφορές είναι αμελητέες - εκείνο των 16Κ θα πρέπει να είναι αρκετό για τα περισσότερα σενάρια χρήσης.
The RAID 1
Η προστασία σημαντικών δεδομένων μπορεί να έχει διαφορετικές εφαρμογές. Το data redundancy (πλεονασμός δεδομένων) είναι ένας από τους τρόπους προστασίας – παρʼ όλα αυτά δεν θα πρέπει ποτέ να θεωρείται εξίσου ασφαλές με το back – up. Την διαφορά των παραπάνω όρων θα την εξηγήσουμε παρακάτω, όμως πάμε να δούμε έναν από τους εύκολους τρόπους με τους οποίους μπορείτε να έχετε μια έξτρα δικλείδα ασφαλείας για τα δεδομένα σας, όσο και έναν up-and-running αντικαταστάτη σε περίπτωση που το βασικό drive του συστήματος αστοχήσει.
Το RAID 1 δεν βασίζεται σε κάποια δύσκολη και δυσνόητη νοοτροπία – αντιθέτως πρόκειται για ένα από τα πιο απλά είδη συστοιχιών που γνωρίζουμε. Η λογική είναι απλή: Έχουμε ένα drive το οποίο χρησιμοποιείται για αποθήκευση δεδομένων, καθώς και ένα δεύτερο το οποίο αποτελεί ακριβές «είδωλο» / αντίγραφο του πρώτου – αυτός είναι και ο λόγος που σχεδόν πάντα δίπλα από τον όρο RAID 1 θα συναντήσουμε και την λέξη “Mirror” (καθρεύτης). Έτσι, κάθε φορά που υπάρχουν νέες εγγραφές προς το πρώτο, τότε αυτόματα ο ελεγκτής φροντίζει να προσθέσει τις αλλαγές και στο δεύτερο drive. Από την άλλη, οι αναγνώσεις γίνονται μόνο από την μια μονάδα.
Όπως είναι εμφανές από τα παραπάνω, το RAID 1 δεν προσφέρει καμία αύξηση σε απόδοση. Στον αντίποδα, εφόσον έχουμε μονάδες οι οποίες αποτελούν αντίγραφα μιας άλλης, τότε αυτές δεν συμβάλλουν ούτε στην αύξηση της χωρητικότητας της συστοιχίας. Με πολύ απλά λόγια, η μια μονάδα λειτουργεί πάντα ως «σκιά» της άλλης, και σε πραγματικές συνθήκες η μονάδα-«σκιά» δεν είναι διακριτή κατά την λειτουργία του συστήματος. Περιγράφοντας με μια μαθηματική φόρμουλα την συνολική χωρητικότητα της συστοιχίας, αν Xi η χωρητικότητα της μιας μονάδας, «n» το άθροισμα των χωρητικοτήτων των μονάδων και F η συνολική χωρητικότητα της συστοιχίας, τότε
Και τελικώς
Εφόσον το RAID 1 δεν εξυπηρετεί σε τίποτα το σύστημα, ούτε σε απόδοση αλλά ούτε σε χωρητικότητα, ποιο το πλεονέκτημά του; Από όσα εκφράσαμε νωρίτερα, τότε μπορούμε RAID 1 εξυπηρετεί μια fail-safe λειτουργία, έχοντας την ανοχή να χάσει 1 από τις 2 μονάδες χωρίς να υπάρξει απώλεια δεδομένων – βασιζόμενο στις πιθανότητες ότι είναι αρκετά απίθανο και τα 2 drives της συστοιχίας να αστοχήσουν ακριβώς την ίδια στιγμή. Εδώ όμως θα σημειώσουμε κάτι σημαντικό: Ο πλεονασμός δεδομένων δεν είναι το ίδιο με το back-up. Το RAID 1 θα σας δώσει την δυνατότητα να έχετε ένα πλήρες αντίγραφο, πχ του δίσκου λειτουργικού του συστήματός σας ώστε να μην έχετε σχεδόν καθόλου downtime. Για απολύτως κρίσιμα αρχεία τότε η λύση ακούει στο όνομα offsite back-up – γιατί σε περίπτωση, ας πούμε, μιας φυσικής καταστροφής, κανενός είδους RAID δεν μπορεί να σας σώσει.
Εφόσον λοιπόν καταλάβαμε τι είναι το RAID 1 και πως λειτουργεί, πάμε να δούμε τον τρόπο με τον οποίο θα στήσουμε μια τέτοια συστοιχία. Η λογική είναι πανομοιότυπη με αυτή του RAID 0 που περιγράψαμε νωρίτερα, αλλά όταν έρθει η ώρα τότε θα αλλάξουμε την επιλογή σε RAID 1.
Στην συγκεκριμένη περίπτωση θα χρησιμοποιήσουμε την δυνατότητα που μας παρέχει η ASRock Z170 Extreme7+ και του ενσωματωμένου ελεγκτή που βρίσκεται στο Z170 chipset.
Σημαντική προϋπόθεση: Η δημιουργία οποιουδήποτε array θα απαιτήσει και την οριστική διαγραφή των δεδομένων στα drives που θα χρησιμοποιηθούν. Για τον λόγο αυτό χρησιμοποιήστε άδειους δίσκους, ή δίσκους που δεν σας ενδιαφέρουν τα δεδομένα τους – εφόσον είσαστε σίγουροι για το τελευταίο.
Πάμε λοιπόν να δούμε τα βήματα:
Έχοντας ακολουθήσει τα βήματα της προετοιμασίας στην σελίδα 3, αφήνουμε το σύστημα να περάσει την αρχική οθόνη, μέχρι να εμφανιστεί εκείνη που μας δείχνει τις πληροφορίες της OpROM, και η οποία απαριθμεί τους εγκατεστημένους δίσκους του συστήματος. Εκεί πρέπει να πατήσουμε και τον συνδυασμό πλήκτρων Ctrl + I, ώστε να μεταβούμε στην πλατφόρμα Intel RST.
Από εδώ και πέρα τα πράγματα είναι αρκετά απλά. Διαλέγουμε την επιλογή Create RAID Volume και πατάμε Enter.
Στην επόμενη οθόνη μας εμφανίζονται και οι επιλογές για την δημιουργία ενός νέου RAID Volume. Το πρώτο βήμα είναι ο καθορισμός του ονόματος – που μπορείτε και να αφήσετε το προεπιλεγμένο εάν δεν σας ενδιαφέρει. Το αμέσως επόμενο βήμα είναι η επιλογή του RAID level, που στην συγκεκριμένη περίπτωση θα το αφήσουμε στο RAID1 (Mirror).
Αμέσως επόμενο βήμα είναι η επιλογή των δίσκων που θα αποτελέσουν την συστοιχία μας. Στην προκειμένη περίπτωση διαλέγουμε τους δίσκους που θέλουμε ώστε να τοποθετηθούν στο array.
Τελικό βήμα είναι η επιλογή του Create Volume. Θα χρειαστούν μόλις μερικά δευτερόλεπτα έως ότου το array να είναι έτοιμο προς χρήση!
Από εκεί και πέρα προχωράμε κανονικά με την εγκατάσταση του λειτουργικού. Επαναλαμβάνουμε πως αν ο εγκαταστάτης δεν αναγνωρίζει την συστοιχία, τότε μπορείτε να φορτώσετε τους απαιτούμενους drives από το DVD που συνοδεύει την μητρική σας.
Μέσα από όλες τις σελίδες που προηγήθηκαν εύχομαι να λάβατε όλη την απαραίτητη ενημέρωση για το RAID και πως μπορεί να σας χρησιμεύσει. Αν όχι, φτάσαμε στην τελευταία σελίδα όπου θα προσπαθήσω να εκφράσω τα συμπεράσματά μου μέσα από αυτόν τον οδηγό – διερευνητικό, το οποίο εύχομαι να σας φάνηκε χρήσιμο όσο και εμένα.
Δεν θα επεκταθώ περισσότερο στο RAID 1, καθώς όπως θα καταλάβατε από την συγκεκριμένη σελίδα, η συστοιχία αυτή δεν θα σας βοηθήσει στα θέματα απόδοσης, αλλά θα προσθέσει μια έξτρα «δικλείδα ασφαλείας» σε περίπτωση που ένα από τα drive αστοχήσει. Κατά κύριο λόγο το RAID 1 είναι χρήσιμο σε πιο «επισφαλή» drive, κοινώς τους μηχανικούς σκληρούς δίσκους οι οποίοι με τις συχνές εγγραφές έχουν μεγαλύτερες πιθανότητες να παρουσιάσουν bad sectors – το οποίο μπορεί να οδηγήσει από απώλεια δεδομένων μέχρι και ολοκληρωτική καταστροφή. Έχοντας έναν δίσκο ως «καθρέφτη» κάποιου άλλου, μας δίνεται η δυνατότητα για ευκολότερη ανάκτηση και συνεπώς λιγότερο downtime – κάτι το οποίο μπορεί να είναι σημαντικό σε επαγγελματικά συστήματα που πρέπει να λειτουργούν συνεχώς, και μια αστοχία μπορεί να οδηγήσει σε απώλεια όχι μόνο δεδομένων, αλλά και χρημάτων. Θα επαναλάβω για μια ακόμα φορά όμως, πως το RAID 1 δεν είναι ισοδύναμο του back-up! Τα κρίσιμα και σημαντικά σας δεδομένα θα πρέπει να τα έχετε δυο ή και περισσότερα αντίγραφα, και σε μια off-site τοποθεσία.
Όσον αφορά το RAID 0, εδώ τα πράγματα περιπλέκονται αρκετά περισσότερο, και ίσως τα αποτελέσματα να μην είναι αυτά ακριβώς που περιμένατε. Κάποια από τα νούμερα σίγουρα είναι εντυπωσιακά, καθώς στις σειριακές εγγραφές είδαμε διαμεταγωγές που έφτασαν ακόμα και το 1GB ανά δευτερόλεπτο. Είναι όμως αυτό ένα ρεαλιστικό σενάριο; Σε ένα απλό καθημερινό σύστημα, το σύνηθες workload μπορεί να αποτελείται από web browsing, παιχνίδια, αναπαραγωγή βίντεο και γενικά διάφορες απλές εργασίες. Εκεί, το I/O performance ενός απλού δίσκου είναι υπέρ-αρκετό. Είδαμε εξάλλου όλες τις περιπτώσεις, και ειδικά στην εγγραφή μικρών αρχείων, όπου το RAID 0 δεν μας δίνει σχεδόν κανένα εμφανές πλεονέκτημα έναντι ενός δίσκου. Επιπλέον, τα boot times και load times επίσης δεν έδειξαν αρκετές διαφορές, τόσες ώστε κάποιος να μπορεί να διακρίνει την διαφορά σε ένα τυφλό τεστ.
Ένα stripped array (RAID 0) έχει την κατάλληλη διάταξη ώστε να προσφέρει τα μέγιστα δυνατά IOPS – αλλά κάτι τέτοιο συμβαίνει μόνο όταν προσθέτουμε εντολές με βάθος μεγαλύτερο από 4. Φτάνοντας σε βάθος εντολών 8, 16 ή και 32 μιλάμε για ένα ιδιαιτέρως σπάνιο workload, το οποίο πολύ δύσκολα θα εμφανιστεί σε ένα τυπικό καθημερινό σύστημα. Υπάρχουν όμως και οι περιπτώσεις όπου το σενάριο απαιτεί την επεξεργασία μεγάλων project – όπως για η επεξεργασία HD video- ή η μεταφορά μεγάλων αρχείων, κοινώς οτιδήποτε απαιτεί μεγάλο I/O performance , είναι και το όπου το RAID 0 αρχίζει να ξεδιπλώνει τις χάρες του.
«Ένα 480GB drive ή δύο των 280GB»; Βάση των παραπάνω, η απάντηση είναι απλή: Απλά αγοράστε ένα από το μεγαλύτερο. Συνυπολογίζοντας και τον παράγοντα «κόστος» στο όλο εγχείρημα, αυτό που θα συναντήσετε είναι πως το drive μεγαλύτερης χωρητικότητας θα σας κοστίσει περίπου το ίδιο ή και ελαφρώς λιγότερο, σε σχέση με την αγορά δυο μικρότερων μονάδων. Από την άλλη, για όσους τους περιορίζει το όριο των 500 MB/s του SATA 3, έχοντας ιδιαίτερες απαιτήσεις από την απόδοση της μονάδας αποθήκευσης και δουλεύουν πάνω σε απαιτητικά projects, ίσως το RAID 0 να είναι μια απλή και οικονομική λύση για μεγαλύτερο performance.
Πηγές: Θα προσθέσω