Στα μοντέρνα συστήματα, υπάρχει συχνά ανάγκη πρόσβασης δεδομένων από πολλές διεργασίες ταυτόχρονα. Για παράδειγμα, μεγάλοι εξυπηρετητές FTP ή HTTP μπορεί να έχουν ανά πάσα στιγμή χιλιάδες ταυτόχρονες εξωτερικές συνδέσεις και να διαθέτουν πολλαπλές διεπαφές 100 Mbit/s οι οποίες ξεπερνάνε κατά πολύ τις δυνατότητες μεταφοράς δεδομένων των περισσότερων σκληρών δίσκων.
Τα τρέχοντα μοντέλα σκληρών δίσκων μπορούν να μεταφέρουν δεδομένα σειριακά με ταχύτητα μέχρι και 70 MB/s, αλλά η τιμή αυτή έχει μικρή σημασία σε ένα περιβάλλον όπου πολλές ανεξάρτητες διεργασίες χρειάζονται πρόσβαση στον ίδιο δίσκο. Σε τέτοιες περιπτώσεις, κάθε διεργασία μπορεί να επιτύχει μόνο ένα μικρό ποσοστό της μέγιστης αυτής απόδοσης. Είναι πιο ενδιαφέρον να δούμε το πρόβλημα από την πλευρά του υποσυστήματος δίσκων: ο σημαντικός παράγοντας είναι ο φόρτος στον οποίο υποβάλλεται το υποσύστημα κατά τη διάρκεια μιας μεταφοράς. Με άλλα λόγια, ο χρόνος που παραμένουν απασχολημένοι οι δίσκοι εξαιτίας της μεταφοράς.
Σε κάθε μεταφορά δεδομένων, ο δίσκος θα πρέπει πρώτα να τοποθετήσει τις κεφαλές στο σωστό σημείο, να περιμένει να περάσει ο πρώτος τομέας κάτω από την κεφαλή ανάγνωσης, και έπειτα να εκτελέσει τη μεταφορά. Οι ενέργειες αυτές μπορούν να θεωρηθούν ατομικές: δεν έχει νόημα να προσπαθήσουμε να τις διακόψουμε.
Ας θεωρήσουμε μια τυπική μεταφορά περίπου 10 kB. Η τρέχουσα γενιά δίσκων υψηλής απόδοσης μπορεί να τοποθετήσει τις κεφαλές στη σωστή θέση σε περίπου 3.5 ms. Οι πιο γρήγοροι δίσκοι έχουν ταχύτητα περιστροφής 15.000 στροφές το λεπτό, έτσι ο μέσος χρόνος καθυστέρησης περιστροφής (μισή περιστροφή) είναι 2 ms. Με 70 MB/s, η μεταφορά αυτή καθ' αυτή θα χρειαστεί περίπου 150 μs, σχεδόν τίποτα σε σχέση με το χρόνο που χρειάζεται για την τοποθέτηση της κεφαλής στο σωστό σημείο. Στην περίπτωση αυτή, ο πραγματικός ρυθμός μεταφοράς πέφτει σε λίγο περισσότερο από ένα 1 ΜΒ/s και είναι εμφανές ότι εξαρτάται σε μεγάλο βαθμό από το μέγεθος των δεδομένων που μεταφέρονται.
Η παραδοσιακή και προφανής λύση σε αυτό το πρόβλημα, είναι να προσθέσουμε «περισσότερους δίσκους»: αντί να χρησιμοποιήσουμε ένα μεγάλο δίσκο, να βάλουμε πολλούς μικρότερους με τον ίδιο τελικό αποθηκευτικό χώρο. Κάθε δίσκος έχει δυνατότητα να μετακινεί τις κεφαλές και να μεταφέρει δεδομένα ανεξάρτητα από τους άλλους, έτσι η πραγματική διαμεταγωγή αυξάνει αναλογικά με το πλήθος των δίσκων που χρησιμοποιούνται.
Η πραγματική αύξηση της διαμεταγωγής είναι φυσικά μικρότερη από το πλήθος των δίσκων που χρησιμοποιούνται: αν και κάθε δίσκος είναι ικανός να μεταφέρει δεδομένα παράλληλα με τους άλλους, δεν υπάρχει τρόπος να εξασφαλίσουμε ότι οι αιτήσεις μεταφοράς κατανέμονται ομοιόμορφα σε όλους τους δίσκους. Είναι αναπόφευκτο ότι το φορτίο σε ένα δίσκο θα είναι μεγαλύτερο από το φορτίο σε κάποιο άλλο.
Η ομοιομορφία κατανομής του φορτίου στους δίσκους, εξαρτάται σε μεγάλο βαθμό από τον τρόπο που έχουν μοιραστεί τα δεδομένα σε αυτούς. Στην παρακάτω συζήτηση, είναι βολικό να σκεφτόμαστε τον αποθηκευτικό χώρο ενός δίσκου ως ένα μεγάλο αριθμό από τομείς στους οποίους έχουμε πρόσβαση με βάση ένα αριθμό, ακριβώς όπως οι σελίδες σε ένα βιβλίο. Η πιο προφανής μέθοδος είναι να χωρίσουμε τον εικονικό δίσκο σε ομάδες από συνεχόμενους τομείς, όπου καθεμία έχει το μέγεθος του πραγματικού ανεξάρτητου φυσικού δίσκου, και να τις αποθηκεύσουμε με αυτό τον τρόπο, περίπου σαν να παίρναμε ένα μεγάλο βιβλίο και να το χωρίζαμε σε μικρότερους τόμους. Η μέθοδος αυτή ονομάζεται συνένωση (concatenation) και έχει το πλεονέκτημα ότι δεν απαιτεί τα μεγέθη των δίσκων να έχουν κάποια σχέση μεταξύ τους. Λειτουργεί πολύ καλά όταν η πρόσβαση στον εικονικό δίσκο είναι ομοιόμορφα κατανεμημένη σε όλη την περιοχή διευθύνσεων του. Όταν η πρόσβαση συγκεντρώνεται σε μια μικρότερη περιοχή, η βελτίωση είναι μικρότερη. Το Σχήμα 21-1 δείχνει την ακολουθία με την οποία γίνεται η κατανομή των θέσεων αποθήκευσης όταν χρησιμοποιείται η συνένωση.
Ένας εναλλακτικός τρόπος αποθήκευσης, είναι να χωριστεί η περιοχή διευθύνσεων σε μικρότερα τμήματα ίσου μεγέθους τα οποία να αποθηκεύονται σειριακά σε διαφορετικές συσκευές. Για παράδειγμα, οι πρώτοι 256 τομείς μπορεί να είναι αποθηκευμένοι στον πρώτο δίσκο, οι επόμενοι 256 στον επόμενο δίσκο, κ.ο.κ. Μετά την χρήση και του τελευταίου δίσκου, η διαδικασία επαναλαμβάνεται μέχρι να γεμίσουν όλοι οι δίσκοι. Αυτή η μέθοδος ονομάζεται striping ή RAID-0. [1] Το striping απαιτεί κάπως περισσότερη προσπάθεια για τον εντοπισμό των δεδομένων και μπορεί να προκαλέσει μεγαλύτερο φορτίο I/O όταν μια μεταφορά κατανέμεται σε πολλαπλούς δίσκους, αλλά από την άλλη επιτυγχάνει μεγαλύτερο σταθερό φορτίο σε κάθε δίσκο. Το Σχήμα 21-2 δείχνει τη σειρά με την οποία χρησιμοποιούνται οι μονάδες αποθήκευσης σε μια οργάνωση τύπου stripe.
[1] |
Το RAID σημαίνει Redundant Array of Inexpensive Disks και παρέχει διάφορες μορφές ανοχής σε σφάλματα, αν και στην παραπάνω χρήση ο όρος είναι κάπως παραπλανητικός: το RAID-0 δεν παρέχει καμιά τέτοια προστασία δεδομένων. |
Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την
<questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.