450 γραμμές
37 KiB
Markdown
450 γραμμές
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 κτλ, κτλ.
|
|||
|
|