449 γραμμές
37 KiB
Markdown
449 γραμμές
37 KiB
Markdown
+++
|
||
title = 'Swapping'
|
||
date = '2000-03-01T00:00:00Z'
|
||
description = ''
|
||
author = 'Μάνος Καραγιώργος(mailto:mantis@pathfinder.gr)'
|
||
issue = ['Magaz 22']
|
||
issue_weight = 2
|
||
+++
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
*Άξονας κίνησης του παρόντος άρθρου είναι η περιγραφή του σκοπού ύπαρξης swap αρχείων/κατατμήσεων, της λειτουργίας τους, της διαδικασίας ορισμού τους, κ.ά.*
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
**1. Let\'s swap\...**
|
||
-------------------------------------------------
|
||
|
||
- [1.1 Σκοπός ύπαρξης swap κατάτμησης/αρχείου](#ss1.1)
|
||
- [1.2 Εικονική μνήμη](#ss1.2)
|
||
- [1.3 Λειτουργία](#ss1.3)
|
||
- [1.4 Swapping/Paging](#ss1.4)
|
||
- [1.5 Μέγεθος swap](#ss1.5)
|
||
- [1.6 Όρια](#ss1.6)
|
||
- [1.7 Συμβουλές για μέγιστη απόδοση](#ss1.7)
|
||
|
||
**2. Swap αρχεία**
|
||
---------------------------------------------
|
||
|
||
- [2.1 Ορισμός swap αρχείου](#ss2.1)
|
||
- [2.2 Ρόλος του /dev/zero](#ss2.2)
|
||
|
||
**3. Swap κατατμήσεις**
|
||
--------------------------------------------------
|
||
|
||
- [3.1 Ορισμός swap κατάτμησης](#ss3.1)
|
||
|
||
**4. Ρύθμιση swap συσκευών**
|
||
-------------------------------------------------------
|
||
|
||
**5. Συγχρονισμός\... ΤΩΡΑ**
|
||
-------------------------------------------------------
|
||
|
||
- [5.1 Ρόλος της sync](#ss5.1)
|
||
|
||
**6. Χρησιμοποίηση swap συσκευών**
|
||
-------------------------------------------------------------
|
||
|
||
- [6.1 Το αρχείο /etc/fstab](#ss6.1)
|
||
- [6.2 Εξηγήσεις\...](#ss6.2)
|
||
- [6.3 Παράμετροι στην swapon](#ss6.3)
|
||
- [6.4 Αυτόματη χρησιμοποιήση swap συσκευών](#ss6.4)
|
||
- [6.5 Μή χρησιμοποίηση swap συσκευών](#ss6.5)
|
||
|
||
**7. Έλεγχος χρήσης swap συσκευών**
|
||
--------------------------------------------------------------
|
||
|
||
- [7.1 free](#ss7.1)
|
||
- [7.2 cat /proc/meminfo](#ss7.2)
|
||
- [7.3 cat /proc/swaps](#ss7.3)
|
||
- [7.4 top](#ss7.4)
|
||
- [7.5 procinfo](#ss7.5)
|
||
|
||
**8. Ιδέες\...**
|
||
-------------------------------------------
|
||
|
||
- [8.1 Συνδυασμός swap και /tmp](#ss8.1)
|
||
- [8.2 Swap κατ\' απαίτηση με loopback device](#ss8.2)
|
||
|
||
**9. Ίδιος χώρος swap με άλλα λειτουργικά συστήματα**
|
||
--------------------------------------------------------------------------------
|
||
|
||
- [9.1 FreeBSD](#ss9.1)
|
||
- [9.2 Microsoft Windows](#ss9.2)
|
||
|
||
**10. Σχετικά**
|
||
--------------------------------------------
|
||
|
||
- [10.1 No time\...](#ss10.1)
|
||
- [10.2 Πηγές](#ss10.2)
|
||
|
||
|
||
### [1. Let\'s swap\...]{#s1}
|
||
|
||
### [1.1 Σκοπός ύπαρξης swap κατάτμησης/αρχείου]{#ss1.1}
|
||
|
||
To swap αρχείο/κατάτμηση χρησιμοποιείται ως εικονική μνήμη (virtual RAM) στο σύστημά σας. Η εικονική μνήμη είναι επέκταση της πραγματικής μνήμης του συστήματος.
|
||
Η ύπαρξή του τις περισσότερες φορές είναι απαραίτητη.
|
||
|
||
### [1.2 Εικονική μνήμη]{#ss1.2}
|
||
|
||
Το Linux υποστηρίζει εικονική μνήμη, δήλαδη χρησιμοποιεί ένα δίσκο σαν επέκταση της RAM, έτσι ώστε το συνολικό μέγεθος της χρησιμοποιήσιμης μνήμης να αυξάνει
|
||
αναλογικά. Ο πυρήνας γράφει τα περιεχόμενα ενός τρέχοντος αχρησιμοποίητου block μνήμης στο σκληρό δίσκο έτσι ώστε η μνήμη να μπορεί να χρησιμοποιηθεί για άλλο
|
||
σκοπό. Όταν τα αρχικά περιέχομενα χρειάζονται ξανά, διαβάζονται πάλι από τη μνήμη.
|
||
|
||
Αυτά όλα γίνονται τελείως αδιαφανή από το χρήστη. Προγράμματα που τρέχουν κάτω από το Linux βλέπουν μόνο τη μεγαλύτερη ποσότητα της διαθέσιμης μνήμης και δεν
|
||
προσέχουν πως κομμάτια αυτών μένουν στο δίσκο από στιγμή σε στιγμή. Το κομμάτι του σκληρού δίσκου που χρησιμοποιείται σαν εικονική μνήμη ονομάζεται χώρος swap
|
||
(χώρος προσωρινής αποθήκευσης).
|
||
|
||
### [1.3 Λειτουργία]{#ss1.3}
|
||
|
||
Όταν χρησιμοποιείται swap χώρος, το Linux μετακινεί αχρησιμοποιήτες σελίδες μνήμης στο σκληρό δισκό, επιτρέποντας να τρέχετε περισσότερες εφαρμογές ταυτόχρονα
|
||
στο σύστημά σας.
|
||
|
||
Όμως, επειδή αυτή η διαδικασία είναι σχετικά αργή (χίλιες φορές περίπου), ο χώρος swap δεν μπορεί να αντικαταστήσει την πραγματική φυσική μνήμη RAM, που είναι
|
||
πιο γρήγορη. Έτσι τα προγράμματα δεν τρέχουν το ίδιο γρήγορα. Οι εφαρμογές του X Window System, κυρίως, έχουν ιδιαίτερες απαιτήσεις σε μνήμη και γι\'αυτό θα
|
||
πρέπει να έχετε μια συσκευή (αρχείο/κατάτμηση) swap.
|
||
|
||
Μερικά προγράμματα καταλαμβάνουν στατικά σελίδες πραγματικής μνήμης (κλειδώνοντάς τες) για λόγους ασφαλείας ή για λόγους απόδοσης. Με αυτόν τον τρόπο οι
|
||
\"κλειδωμένες\" σελίδες μειώνουν το μέγεθος της διαθέσιμης πραγματικής μνήμης, καθιστώντας απαραίτητη τη χρήση swap μνήμης.
|
||
|
||
### [1.4 Swapping/Paging]{#ss1.4}
|
||
|
||
Με απλά λόγια:
|
||
|
||
Υπάρχει διαχωρισμός μεταξύ του swapping (γράφοντας ολόκληρες τις διεργασίες (processes) σε χώρο swap) και του paging (γράφοντας μόνο καθορισμένου μεγέθους
|
||
κομμάτια, συνήθως μερικά kilobytes τη φορά).
|
||
|
||
Το paging είναι συνήθως πιο αποτελεσματικό, και αυτό είναι που κάνει το Linux, αλλά μιλάμε για swapping έτσι κι αλλιώς.
|
||
|
||
### [1.5 Μέγεθος swap]{#ss1.5}
|
||
|
||
Ορισμένοι προτείνουν ότι η swap μνήμη πρέπει να έχει διπλάσιο μέγεθος από αυτό της πραγματικής μνήμης. Υπάρχουν αρκετές διαφοροποιήσεις σχετικά με το πόση swap
|
||
μνήμη θα πρέπει να χρησιμοποιήσετε: όλες εξαρτώνται από το τι εφαρμογές θέλετε να τρέχετε\...
|
||
|
||
Το μέγεθος του χώρου swap εξαρτάται ακόμη από πόση μνήμη έχετε ήδη στο σύστημά σας.
|
||
|
||
Αν έχετε αρκετή φυσική μνήμη (\>128ΜΒ) και είστε ο μοναδικός χρήστης του συστήματος χωρίς ιδιαίτερες απαιτήσεις μπορεί να σκεφτείτε να μην χρησιμοποιήσετε μνήμη
|
||
swap, έχοντας έτσι περισσότερο ελεύθερο αποθηκευτικό χώρο και μειώνοντας το χρόνο αναζήτησης στα δεδομένα σας.
|
||
|
||
Μπορεί να μην χρησιμοποιείτε μια swap κατάτμηση πολύ συχνά, όταν όμως τη χρειαστείτε η παρουσία της είναι ανεκτίμητη.
|
||
|
||
Πιθανότατα δεν έχει νόημα να έχετε swap μνήμη περισσότερη από τρεις φορές της φυσικής μνήμης.
|
||
|
||
Υπολογίστε τη συνολικη σας ανάγκη σε μνήμη. Αυτή είναι το μεγαλύτερο μέγεθος μνήμης που πιθανώς θα χρειαστείτε σε κάθε στιγμή, δηλαδή το άθροισμα των απαιτήσεων
|
||
σε μνήμη όλων των προγραμμάτων που θέλετε να τρέχετε ταυτοχρόνως. Αυτό μπορεί να γίνει τρέχοντας την ίδια ώρα όλα τα προγράμματα που πιθανώς θα τρέξετε ποτέ
|
||
ταυτοχρόνως. Για παράδειγμα, αν θέλετε να τρέχετε το X Window System, θα πρέπει να καταχωρίσετε περίπου 8-16 MB για αυτό, ο gcc θέλει αρκετά megabytes (μερικά
|
||
αρχεία χρειάζονται μία ασυνήθιστα μεγάλη ποσότητα, μέχρι και δεκάδες megabytes, αλλά συνήθως περίπου 4-8 θα είναι αρκετά) κτλ. Ο πυρήνας θα χρησιμοποιήσει
|
||
περίπου 1-2ΜΒ από μόνος του, και τα συνηθισμένα shells και άλλα μικρά βοηθητικά προγράμματα ίσως μερικές εκατοντάδες kilobytes (περίπου 1ΜΒ όλα μαζί). Δεν
|
||
υπάρχει ανάγκη να προσπάθησετε να είστε ακριβείς, υπολογισμοί στο περίπου είναι μια χαρά, αλλά μπορεί να θέλετε να είστε στην απαισιόδοξη πλευρά.
|
||
|
||
Θυμηθείτε πως αν υπάρχουν αρκετά άτομα που χρησιμοποιούν το σύστημα ταυτοχρόνως, θα καταναλώνουν όλα μνήμη. Πάντως, αν δύο άτομα τρέχουν το ίδιο πρόγραμμα
|
||
αταυτοχρόνως, η συνολική κατανάλωση μνήμης συνήθως δεν είναι διπλάσια, εφόσον οι σελίδες του κώδικα και οι shared βιβλιοθήκες υπάρχουν ήδη μια φορά.
|
||
|
||
### [1.6 Όρια]{#ss1.6}
|
||
|
||
Το μέγιστο χρήσιμο μέγεθος μιας περιοχής swap εξαρτάται πλέον από την αρχιτεκτονική του συστήματος.
|
||
|
||
Είναι περίπου:
|
||
|
||
- 2GB σε i386, PPC, m68k, ARM,
|
||
- 1GB σε sparc,
|
||
- 512MB σε mips,
|
||
- 128GB σε alpha και
|
||
- 3TB σε sparc64.
|
||
|
||
Υποστηρίζονται μέχρι και 8 συνολικά περιοχές swap.
|
||
|
||
### [1.7 Συμβουλές για μέγιστη απόδοση]{#ss1.7}
|
||
|
||
Συνιστάται η χρησιμοποιήση μιας swap κατάτμησης παρά ενός swap αρχείου. Έτσι σε πολλές εγκαταστάσεις του Linux θα συναντήσετε δύο τουλάχιστον κατατμήσεις. To
|
||
swapping σε αρχείο επιφέρει σχετική μείωση της απόδοσης του συστήματος γιατί πηγαίνει μέσω του συστήματος αρχείων (ext2). Από την άλλη, μπορείτε να προσθέσετε
|
||
swap αρχείο όποτε θέλετε χωρίς καμία ανάγκη για κατάτμηση των δίσκων σας.
|
||
|
||
Χρησιμοποποιείστε πρώτα αρχείο swap, δουλέψτε με το σύστημα σας για λίγο καιρό για να δείτε πόση μνήμη swap χρειάζεστε περίπου, και μετά φτιάξτε μια κατάτμηση
|
||
swap. Μπορείτε βέβαια να χρησιμοποιείτε πολλές swap κατατμήσεις ή/και swap αρχεία, ταυτοχρόνως.
|
||
|
||
Αφήστε, πάντως, περιθώρια ασφαλείας γιατί πιθανότατα θα ξεχάσετε να τρέξετε μερικά προγράμματα που θα θέλετε να τρέχετε και βεβαιωθείτε ότι έχετε ελέυθερο χώρο
|
||
σε κάθε περίπτωση. Είναι καλύτερα να καταχωρήσετε πάρα πολύ χώρο παρά πολύ λίγο (προσέξτε τους τόνους στο παρα\...), αλλά δεν υπάρχει ανάγκη να το παρακάνετε
|
||
και να καταχωρήσετε ολόκληρο δίσκο, εφόσον αχρησιμοποιήτος χώρος swap είναι no doubt wasted χώρος.
|
||
|
||
Αν ο χώρος swap, που θα υπολογίσετε με την παραπάνω μέθοδο, είναι πάρα πολύ μεγαλύτερος από τη φυσική σας μνήμη (όχι τη δικιά σας, του συστήματος σας\...),
|
||
καλύτερα να σκεφτείτε σοβαρά να επενδύσετε στην αγορά περισσότερης φυσικής μνήμης, αλλιώς η απόδοση θα είναι αρκετά χαμηλή.
|
||
|
||
Είναι καλή ιδέα να έχετε τουλάχιστον λίγο χώρο swap, ακόμη και αν οι υπολογισμοί σας δείχουν ότι δεν χρειάζεστε καθόλου. Το Linux χρησιμοποιεί το χώρο swap
|
||
δυαναμικά, έτσι ώστε όση περισσότερη φυσική μνήμη το δυνατόν να μπορεί να παραμείνει ελεύθερη. Το Linux θα swap out σελίδες μνήμης που δεν έχουν χρησιμοποιηθεί,
|
||
ακόμη και αν η μνήμη δεν χρειάζεται ακόμη για τίποτα. Αυτό αποφεύγει την αναμονή για swapping όταν χρειάζεται: το swapping μπορεί να γίνει νωρίτερα, όταν ο
|
||
δίσκος είναι έτσι κι αλλιώς αδρανής.
|
||
|
||
Ο χώρος swap μπορεί να χωριστεί ανάμεσα σε αρκετούς δίσκους. Αυτό μερικές φορές βελτιώνει την απόδοση, ανάλογα με τις σχετικές ταχύτητες των δίσκων και το χρόνο
|
||
προσπέλασης αυτών. Μπορεί να θέλετε να πειραματιστείτε με μερικά διαδεδομένα μοντέλα, αλλά κατανοήστε ότι κάνοντας τα πειράματα κανονικά είναι αρκετά δύσκολο.
|
||
Δε θα πρέπει να πιστεύετε φήμες που λένε ότι ένα μοντέλο είναι ανώτερο από κάθε άλλο, εφόσον δε θα είναι πάντα αληθείς.
|
||
|
||
Μπορείτε να χρησιμoποιήσετε και περισσότερες από μία swap κατατμήσεις.
|
||
|
||
Μερικοί χρησιμοποιούν RAM disks για swapping, δεν κερδίζετε πολλά με αυτόν τον τρόπο αφού μειώνεται τη διαθέσιμη μνήμη για caching και buffering.
|
||
|
||
Συνιστάται να δημιουργείτε κατατμήσεις swap σε μεσαία tracks του σκληρού δίσκου (συνήθως /dev/?d?x, όπου xε{4,5,\...} ανάλογα με τον αριθμό των υπάρχοντων
|
||
κατατμήσεων) , γιατί τότε η αναζήτηση είναι σχετικά γρήγορη (γρήγορη διαμεταγωγή και αναζήτηση αρχείων).
|
||
|
||
Αν χρησιμοποιείτε swap αρχείο συνιστάται να τοποθετείται σε ξεχωριστή κατάτμηση, αφού περιλαμβάνει λιγότερα ρίσκα. Αυτή η κατάτμηση δε θα μπορεί πλεόν να
|
||
χρησιμοποιηθεί, ακόμη και αν φαίνεται να υπάρχει ελεύθερος χώρος σε αυτή.
|
||
|
||
|
||
### [2. Swap αρχεία]{#s2}
|
||
|
||
Ένα swap αρχείο είναι ένα κανονικό αρχείο. Δεν είναι με κανένα τρόπο ειδικό προς τον πυρήνα. Το μόνο πράγμα που νοιάζει τον πυρήνα είναι να μην έχει καθόλου
|
||
\"τρύπες\", και να είναι έτοιμο για χρήση με την εντολή mkswap.
|
||
|
||
Πρέπει, πάντως, να διαμένει σε έναν τοπικό δίσκο του συστήματος. Δεν μπορεί να διαμένει σε ένα σύστημα αρχείων που έχει προσαρτηθεί μέσω NFS για λόγους
|
||
υλοποίησης.
|
||
|
||
Το κομμάτι σχετικά με τις \"τρύπες\" είναι σημαντικό. Το αρχείο swap κρατάει τον χώρο του δίσκου έτσι ώστε ο πυρήνας να μπορεί γρήγορα να swap out μια σελίδα
|
||
χωρίς να χρειάζεται να παέι μέσω όλων των πραγμάτων που είναι χρήσιμα όταν καταχωρεί ένα sector δίσκου σε ένα αρχείο. Ο πυρήνας απλώς χρησιμοποιεί όποιους
|
||
τομείς έχουν ήδη καταχωρηθεί στο αρχείο. Επειδή μια \"τρύπα\" σε ένα αρχείο σημαίνει πως δεν υπάρχουν καθόλου τομείς δίσκου καταχωρημένοι (για αυτό το μέρος
|
||
μέσα στο αρχείο), δεν είναι καλό για τον πυρήνα να προσπαθεί να τους χρησιμοποιεί.
|
||
|
||
### [2.1 Ορισμός swap αρχείου]{#ss2.1}
|
||
|
||
Ένας καλός τρόπος για να δημιουργήσετε το swap αρχείο χωρίς \"τρύπες\" είναι μέσω της ακόλουθης εντολής:
|
||
|
||
dd if=/dev/zero of=<swap αρχείο> bs=<bytes> count=<blocks>
|
||
|
||
- if=/dev/zero : input file, διαβάζει από αυτό το αρχείο
|
||
- of=\<swap αρχείο\> : output file, γράφει σε αυτό το αρχείο
|
||
- bs=\<bytes\> : block size, διαβάζει και γράφει \<bytes\> bytes κάθε φορά
|
||
- count=\<blocks\> : αντιγράφει μόνο \<blocks\> blocks από αυτά που διαβάζει
|
||
|
||
Θα εμφανιστεί το μήνυμα:
|
||
|
||
<blocks>+0 records in
|
||
<blocks>+0 records out
|
||
|
||
Είναι καλύτερα το μέγεθος να είναι πολλαπλάσιο του 4, επειδή ο πυρήνας γράφει σελίδες μνήμης, που είναι 4ΚΒ σε μέγεθος. Αν το μέγεθος δεν είναι πολλαπλάσιο του
|
||
4, το τελευταίο ζευγάρι των kilobytes μπορεί να είναι αχρησιμοποίητο. Ειδικότερα, για swap αρχείο το μέγεθος είναι καλό να είναι πολλαπλάσιο του inode μεγέθους,
|
||
συνήθως 1024 ή 2048 (ή ακόμη και 4096), γιατί 1block=1KB=1024 bytes άρα τιμές πολλαπλάσιες του 1024.
|
||
|
||
### [2.2 Ρόλος του /dev/zero]{#ss2.2}
|
||
|
||
Το /dev/zero είναι ένα ειδικό αρχείο που κατά την ανάγνωσή του, επιστρέφει \\0 χαρακτήρες. Είναι μια συσκευή που όταν την διαβάζετε παίρνετε άπειρα ASCII 0.
|
||
Είναι χρήσιμη ως πηγή \"κενών\" bytes, όπως ακριβώς και πολλοί επεξεργαστές RISC έχουν ένα zero καταχωρητή που είναι πάντα 0.
|
||
|
||
Δημιουργείται με:
|
||
|
||
mknod -m 666 /dev/zero c 1 5
|
||
chown root.mem /dev/zero
|
||
|
||
|
||
### [3. Swap κατατμήσεις]{#s3}
|
||
|
||
Μία swap κατάτμηση δεν είναι επίσης ειδική με κανέναν τρόπο. Τη δημιουργείτε όπως κάθε άλλη κατάτμηση. Η μόνη διαφορά είναι ότι χρησιμοποιείται σαν μια άδεια
|
||
(raw) κατάτμηση, δηλαδή, δεν περιέχει κανένα σύστημα αρχείων. Είναι καλη ιδέα να σημειώνετε τις κατατμήσεις swap σαν τύπο 82 (Linux swap). Αυτό κάνει τα
|
||
περιεχόμενα της κατάτμησης πιο σαφή, αν και δεν είναι αυστηρώς απαραίτητο στον πυρήνα.
|
||
|
||
Όπως αναφέραμε, οι κατατμήσεις swap είναι πιο γρήγορες ξεπερνούν το σύστημα αρχείων, διαβάζοντας κατευθείαν από τον σκληρό δίσκο.
|
||
|
||
### [3.1 Ορισμός swap κατάτμησης]{#ss3.1}
|
||
|
||
Η swap κατάτμηση δεν είναι ανάγκη να βρίσκεται στον ίδιο σκληρό δίσκο με την κατάτμηση που είναι εγκατεστημένο το Linux.
|
||
|
||
Τρέξτε το πρόγραμμα fdisk. Δώστε n (add a new partition), μετά p (primary partition), για hex code: 82 (αν γράψετε l θα δείτε ότι αυτός ο τύπος αντιστοιχεί σε
|
||
κατάτμηση Linux swap).
|
||
|
||
Κάθε είδος κατάτμησης έχει έναν ξεχωριστό (identifier number) αριθμό ώστε να αναγνωρίζεται από το λειτουργικό σύστημα. (π.χ. για το Linux είναι 83).
|
||
|
||
Τελος, δώστε: w (write table to disk and exit).
|
||
|
||
|
||
### [4. Ρύθμιση swap συσκευών]{#s4}
|
||
|
||
Εφόσον έχετε δημιουργήσει ένα swap αρχείο ή μια swap κατάτμηση, πρέπει να γράψετε μια υπογραφή στην αρχή του/της, αυτή περιέχει μερικές διευθυντικές πληροφορίες
|
||
και χρησιμοποιείται από τον πυρήνα. Η εντολή για να το κάνετε αυτό είναι η mkswap. Τη χρησιμοποιείτε έτσι:
|
||
|
||
mkswap <swap συσκευή> <μέγεθος>
|
||
|
||
Συνηθισμένες παράμετροι:
|
||
|
||
- -c ελέγχει τη συσκευή (block device) για bad blocks
|
||
- -v0 παλιά μέθοδος (μέχρι 128ΜΒ)
|
||
- -v1 νέα μέθοδος (μέχρι 2GB)
|
||
|
||
Θα εμφανιστεί το μήνυμα:
|
||
|
||
Setting up swapspace, size = <μεγεθος> bytes
|
||
|
||
Ο swap χώρος δεν χρησιμοποιείται ακόμη. Υπάρχει, αλλά ο πυρήνας δεν τον χρησιμοποιεί για να παρέχει εικονική μνήμη.
|
||
|
||
Πρέπει να είστε πολύ προσεκτικοί στη χρησιμοποίηση της εντολής mkswap, εφόσον ΔΕΝ ελέγχει αν το αρχείο ή η κατάτμηση χρησιμοποιείται για άλλο σκοπό. Η
|
||
χρησιμοποίησή της γίνεται συνήθως κατά την εγκατάσταση του συστήματος, την εκτελείτε μόνο ΜΙΑ φορά.
|
||
|
||
|
||
### [5. Συγχρονισμός\... ΤΩΡΑ]{#s5}
|
||
|
||
H εντολή sync μέσω της συνάρτησης sync() δεσμεύει πρώτα τα inodes σε buffers, και μετά τα buffers στο σκληρό δίσκο. Εκτελείται, συνήθως, αμέσως μετά από την
|
||
mkswap.
|
||
|
||
### [5.1 Ρόλος της sync]{#ss5.1}
|
||
|
||
Κάθε U\*ix έχει φορτωμένο στη μνήμη το super block και τον inode πίνακα και ό,τι δουλειά κάνει πάνω σε αυτά την κάνει στη MNHMH, για ταχύτητα. Περιοδικά τα
|
||
\"κατεβάζει\" και στο δίσκο, για αποφυγή απρόσμενων γεγονότων. To sync είναι ακριβώς η εντολή που κάνει το \"κατέβασμα\". Με αυτόν τον τρόπο μπορεί κάποιος να
|
||
βεβαιωθεί ότι ολά έχουν γραφτεί με ασφάλεια.
|
||
|
||
Στα περισσότερα UNIX συστήματα, υπάρχει ένα πρόγραμμα ου λέγεται update και τρέχει στο background κάνοντας ένα sync κάθε 30 δευτερόλεπτα, οπότε συνήθως δεν
|
||
είναι απαραίτητο να χρησιμοποιήσετε την sync. Το Linux έχει έναν επιπρόσθετο δαίμονα (daemon), τον bdflush, ο οποίος κάνει ένα πιο ατελές sync πιο συχνά.
|
||
|
||
Κάτω από το Linux, ο bdflush εκκινείται από το update. Δεν υπάρχει συνήθως κανένας λόγος για να ανησυχείτε, αλλά αν ο bdflush πεθάνει για κάποιο λόγο, ο πυρήνας
|
||
θα σας προειδοποιήσει γι\' αυτό, και θα πρέπει να τον ξεκίνησετε μόνοι σας (/sbin/update).
|
||
|
||
|
||
### [6. Χρησιμοποίηση swap συσκευών]{#s6}
|
||
|
||
Εφόσον έχουν ακολουθηθεί τα παραπάνω βήματα για ρύθμιση swap αρχείων/κατατμήσεων, η χρησιμοποίηση αυτών από τον πυρήνα γίνεται με την εντολή swapon.
|
||
|
||
### [6.1 Το αρχείο /etc/fstab]{#ss6.1}
|
||
|
||
FileSystem TABle
|
||
|
||
Το αρχείο /etc/fstab δίνει πληροφορίες για τα διάφορα συστήματα αρχείων στα οποία μπορούμε να έχουμε πρόσβαση.
|
||
|
||
Για μια swap συσκευή θα δείτε μια γράμμη όπως η παρακάτω. Στο σύστημά μου (powered by SuSE) είναι:
|
||
|
||
/dev/hde3 swap swap defaults 0 0
|
||
|
||
### [6.2 Εξηγήσεις\...]{#ss6.2}
|
||
|
||
- Το πρώτο πεδίο περιγράφει τη block συσκευή ή το σύστημα αρχείων που θέλουμε να προσαρτήσουμε,
|
||
- το δεύτερο περιγράφει το σημείο προσάρτησης (για swap κατάτμηση είναι swap),
|
||
- το τρίτο περιγράφει τον τύπο του συστήματος αρχείων (δείτε cat /proc/filesystems για αυτά που υποστηρίζονται από τον τρέχοντα πυρήνα σας),
|
||
- το τέταρτο περιγράφει τις παραμέτρους προσάρτησης,
|
||
- το πέμπτο χρησιμοποιείται από την εντολή dump (στην περίπτωσή μας είναι 0, δεν χρειάζεται),
|
||
- το έκτο καθορίζει τη σειρά προτεραιότητας με την οποία τα συστήματα αρχείων ελέγχονται κατά την εκκίνηση του Linux (στην περίπτωση μας είναι 0, δεν είναι
|
||
απαραίτητο).
|
||
|
||
### [6.3 Παράμετροι στην swapon]{#ss6.3}
|
||
|
||
-a: διαβάζει το /etc/fstab και κάνει διαθέσιμες τις συσκευές/αρχεία που προορίζονται για swapping.
|
||
|
||
-p: θέτει προτεραίοτητα στο swapon, 0 \< p \< 32767 από το /etc/fstab, όπου pri=\"τιμή\".
|
||
|
||
### [6.4 Αυτόματη χρησιμοποιήση swap συσκευών]{#ss6.4}
|
||
|
||
Επεξεργαστείτε το αρχείο /etc/fstab και δημιουργήστε ένα νέο πεδίο για κάθε συσκευή που θέλετε να χρησιμοποιήσετε.
|
||
|
||
Τα script εκκίνησης θα τρέξουν την εντολή swapon -a χρησιμοποιώντας όσες swap συσκευές έχουν καταχωριθεί στο /etc/fstab. Επομένως, η εντολή swapon
|
||
χρησιμοποιείται μόνο όταν χρειάζεται περισσότερος χώρος swap.
|
||
|
||
### [6.5 Μή χρησιμοποίηση swap συσκευών]{#ss6.5}
|
||
|
||
Μία περιοχή swap μπορεί να μην χρησιμοποιηθεί με χρήση της εντολής swapoff. Δεν είναι συνήθως απαραίτητο να το κάνετε, εκτός από προσωρινούς χώρους swap. Όλες
|
||
οι σελίδες που χρησιμοποιούνται στο χώρο swap αντιγράφονται στη μνήμη πρώτα. Αν δεν υπάρχει αρκετή φυσική μνήμη να τις κρατήσει, Θα αντιγραφούν τότε σε κάποιον
|
||
άλλο χώρο. Αν δεν υπάρχει αρκετή εικονική μνήμη να κρατήσει όλες τις σελίδες, το Linux θα αρχίσει να thrash (πιθανότατα, θα αρχίσει να παραπονιέται ο σκληρός,
|
||
όσο σκληρός και αν είναι\...). Ύστερα από λίγο, θα πρέπει να γίνει recover, αλλά ενδιάμεσα το σύστημα θα είναι μη χρησιμοποιήσιμο. Θα πρέπει να ελέγξτε (π.χ.,
|
||
με free) αν υπάρχει αρκετή ελεύθερη μνήμη πριν απομακρύνετε ένα χώρο swap από χρήση.
|
||
|
||
Όλες οι περιοχές swap που χρησιμοποιούνται αυτόματα με swapon -a μπορούν αν απομακρυνθούν με swapoff -a. Διαβάζει το αρχείο /etc/fstab για να βρει τί να
|
||
απομακρύνει. Όσες περιοχές swap έχουν χρησιμοποιηθεί manually θα παραμείνουν σε χρήση.
|
||
|
||
Μερικές φορές πολύς χώρος swap μπορεί να χρησιμοποιείται ακόμη και αν υπάρχει αρκετή πραγματική μνήμη διαθέσιμη. Αυτό μπορεί να συμβεί για παράδειγμα αν σε
|
||
κάποιο σημείο υπάρχει ανάγκη για swap, αλλά αργότερα μια μεγάλη διεργασία που καταλάμβανε μεγάλο μέρος της φυσικής μνήμης τερματίζεται και ελευθερώνει τη μνήμη.
|
||
Τα swapped-out δεδομένα δεν αντιγράφονται αυτόματα στη μνήμη έως ότου χρειάζεται, έτσι η φυσική μνήμη μπορεί να παραμείνει ελεύθερη για ένα μεγάλο χρονικό
|
||
διάστημα. Δεν υπάρχει καμία ανάγκη να ανησυχείτε γι\'αυτό, αλλά μπορεί να σας ανακουφίζει το γεγονός αν γνωρίζετε τι συμβαίνει.
|
||
|
||
|
||
### [7. Έλεγχος χρήσης swap συσκευών]{#s7}
|
||
|
||
Έχοντας μια swap συσκευή μπορείτε να δείτε πόση από αυτή χρησιμοποιείται. Απλώς δώστε:
|
||
|
||
### [7.1 free]{#ss7.1}
|
||
|
||
total used free shared buffers cached
|
||
Mem: 63092 61604 1488 12684 7664 43396
|
||
-/+ buffers/cache: 10544 52548
|
||
Swap: 136512 376 136136
|
||
|
||
Η πρώτη γραμμή Mem εμφανίζει τη φυσική μνήμη.
|
||
|
||
- Η στήλη total ΔΕΝ εμφανίζει τη φυσική μνήμη που χρησιμοποιείται από τον πυρήνα, που είναι περίπου 1-2MB.
|
||
- Η στήλη used εμφανίζει το μέγεθος της μνήμης που χρησιμοποιείται (η δεύτερη γραμμή δεν μετράει buffers).
|
||
- Η στήλη free εμφανίζει το μέγεθος της αχρησιμοποίητης μνήμης.
|
||
- Η στήλη shared εμφανίζει το μέγεθος της μνήμης που μοιράζεται από διάφορες διεργασίες, όσο περισσότερη, τόσο καλύτερη.
|
||
- Η στήλη buffers εμφανίζει το τρέχον μέγεθος buffer cache του δίσκου.
|
||
|
||
Η τελευταία γραμμή Swap εμφανίζει παρόμοιες πληροφορίες για τις περιοχές swap. Αν αυτή η γραμμή είναι όλο μηδενικά, ο swap χώρος σας δεν έχει ενεργοποιηθει.
|
||
|
||
### [7.2 cat /proc/meminfo]{#ss7.2}
|
||
|
||
total: used: free: shared: buffers: cached:
|
||
Mem: 64606208 63078400 1527808 12877824 7847936 44437504
|
||
Swap: 139788288 385024 139403264
|
||
MemTotal: 63092 kB
|
||
MemFree: 1492 kB
|
||
MemShared: 12576 kB
|
||
Buffers: 7664 kB
|
||
Cached: 43396 kB
|
||
BigTotal: 0 kB
|
||
BigFree: 0 kB
|
||
SwapTotal: 136512 kB
|
||
SwapFree: 136136 kB
|
||
|
||
### [7.3 cat /proc/swaps]{#ss7.3}
|
||
|
||
Filename Type Size Used Priority
|
||
/dev/hde4 partition 136512 376 -1
|
||
|
||
### [7.4 top]{#ss7.4}
|
||
|
||
Mem: 63092K av, 61544K used, 1548K free, 13116K shrd, 7516K buff
|
||
Swap: 136512K av, 376K used, 136136K free 43372K cached
|
||
|
||
### [7.5 procinfo]{#ss7.5}
|
||
|
||
Memory: Total Used Free Shared Buffers Cached
|
||
Mem: 63092 61488 1604 12796 7516 43372
|
||
Swap: 136512 376 136136
|
||
|
||
|
||
### [8. Ιδέες\...]{#s8}
|
||
|
||
### [8.1 Συνδυασμός swap και /tmp]{#ss8.1}
|
||
|
||
Η ιδέα υπάρχει από το tmpfs στα \*BSD και το Solaris, καθώς και από το swapfs σε NeXT συστήματα.
|
||
|
||
Η λογική είναι ότι αυτά χρησιμοποιούνται για προσωρινή αποθήκευση που υπό κανονικές συνθήκες δεν απαιτούν πάρα πολύ χωρό. Έτσι συνδυάζοντας τα swap και /tmp δε
|
||
χρειάζεται να κρατάτε ξεχωριστό χώρο για αυτά τα δύο, όπως κανονικά θα έπρεπε. Αυτό το ειδικευμένο σύστημα αρχείων είναι ένας swappable RAM δίσκος, που
|
||
τοποθετεί τα προσωρινά αρχεία στην swap κατάτμηση. Σημαντικό μειονέκτημα είναι ότι για να κερδίσετε αποθηκευτικό χώρο, χάνετε ταχύτητα (μειώνεται λίγο η απόδοση
|
||
του συστήματος), αφού δεν μπορείτε να έχετε και τα δυο σε παραλληλία, γεγονός που ξεπερνιέται με χρήση πολλαπλών δίσκων (interleaving). Με αυτόν τον τρόπο
|
||
μπορείτε να μοιράσετε σε διάφορους δίσκους το φόρτωμα του εν λόγω συστήματος αρχείων και να πετύχετε παραλληλία.
|
||
|
||
### [8.2 Swap κατ\' απαίτηση με loopback device]{#ss8.2}
|
||
|
||
Εφόσον έχετε υποστήριξη για loopback devices στον πυρήνα, γράψτε ένα shell script ώστε να εκχωρείται δυναμικά ο χώρος του swap σε αρχείο βέβαια, χωρίς ξεχωριστή
|
||
κατάτμηση\.....κτλ, κτλ
|
||
|
||
|
||
### [9. Ίδιος χώρος swap με άλλα λειτουργικά συστήματα]{#s9}
|
||
|
||
### [9.1 FreeBSD]{#ss9.1}
|
||
|
||
Δεν έχω (ακόμα\...) δεν έχω δοκιμάσει. Δείτε το Linux+FreeBSD mini HOWTO.
|
||
|
||
### [9.2 Microsoft Windows]{#ss9.2}
|
||
|
||
Έχω (ακόμα\...), δεν έχω δοκιμάσει. Δείτε το Tips-HOWTO και το Swap-Space mini HOWTO, που πλέον συντηρείται. Το ονομα είναι παραπλανητικό\... αναφέρεται σε
|
||
ειδικό θέμα ενώ το όνομά του παραπέμπει αλλού.
|
||
|
||
|
||
### [10. Σχετικά]{#s10}
|
||
|
||
### [10.1 No time\...]{#ss10.1}
|
||
|
||
Τα τρία τελευταία κομμάτια, για loopback και για μοίρασμα χώρου swap με άλλα OS θα μπορούσα να τα αναλύσω περισσότερο. Έδωσα, πάντως, κάποιους κατευθυντήριους
|
||
άξονες για κάθε ενδιαφερόμενο. Ήθελα να δώσω το στοιχείο της πληρότητας αλλά αν το έκανα σε κάθε πιθανή γωνία του παρόντος θα κατέληγα σε πληρέστατο HOWTO, που
|
||
θα απαιτούσε πολύ χρόνο\...
|
||
|
||
### [10.2 Πηγές]{#ss10.2}
|
||
|
||
Για τη σύνταξη του παραπάνω χρησιμοποιήθηκαν διάφορες πηγές, από HOWTOs, από το SAG, από ερωτήσεις/απαντήσεις διάφορων mailining lists/newsgroups, από σχετικές
|
||
man pages, εγχειρίδια διανομών, βιβλία για το Linux κτλ, κτλ.
|
||
|