Per funzionare correttamente un computer dipende da una quantità adeguata di memoria. Semplicemente dicendo che non ci può mai essere abbastanza. Più memoria fisica è installata, più costoso è. Principalmente, il risultato è un compromesso intelligente tra costi e velocità per accedere alle celle di memoria.
Per ottenere questo compromesso i sistemi UNIX/Linux combina due tipi di memoria - memoria fisica (RAM) e lo spazio di scambio. Complessivamente questo si chiama memoria virtuale di un sistema di calcolo. La memoria fisica è piuttosto costosa ma veloce e accessibile all'interno dei nanosecondi. Al contrario, la memoria di scambio è piuttosto economica, ma lenta e accessibile all'interno di millisecondi.
Esistono alcuni motivi per cui la memoria di swap è utile. In primo luogo, a volte i processi singoli richiedono più memoria di quanto il sistema possieda fisicamente e può fornire di più ai processi che lo richiedono. Di conseguenza, tutti i dati conservati nella memoria fisica non possono essere più archiviati lì. Ora, lo spazio di scambio entra in gioco e una selezione di pagine di memoria viene trasferita nello spazio di scambio per liberare la memoria fisica.
In secondo luogo, non tutti i dati sono necessari in memoria contemporaneamente. Ecco perché le pagine di memoria meno usate sono parcheggiate sullo spazio di swap per avere più memoria fisica gratuita possibile. Questo metodo è chiamato l'algoritmo di sostituzione della pagina meno recentemente utilizzato (LRU) [1].
Tipi di scambio
Lo spazio di scambio esiste in due varianti. La versione 1 è una partizione disco separata che è la cosiddetta partizione di scambio. Non ci sono file archiviati su quella partizione ma informazioni sulla memoria (dumps). Semplicemente, la versione 2 è un file su un disco che risiede nel file system sul tuo harddisk. La versione 1 è molto comune sui sistemi UNIX/Linux, BSD e OS X, mentre la versione 2 esiste su sistemi che eseguono Microsoft Windows. La versione 2 può anche essere abilitata su sistemi UNIX/Linux (vedi sotto).
Per vedere quale spazio di scambio è attivo sul sistema UNIX/Linux Esegui il seguente comando in un terminale:
$ /sbin /swapon -s
Dimensione del tipo di nome file usato priorità
/dev/dm -3 partizione 16150524 316484 -1
$
In alternativa è possibile inviare una richiesta al file system proc ed eseguire il comando cat /proc /swaps
Questo sistema Linux ha una partizione di swap con una dimensione di circa 15 GB in cui sono attualmente in uso oltre 300 m. La colonna prioritaria mostra quale spazio di scambio da utilizzare per primo. Il valore predefinito è -1. Maggiore è il valore prioritario, più in precedenza è preso in considerazione questo spazio di swap. L'opzione -s è la versione breve di -summary. Questa opzione è deprecata e si consiglia di utilizzare l'opzione -Show come segue, invece:
$ /sbin /swapon --show = nome, tipo, dimensione, usata, prio
Dimensione del tipo di nome usato prio
/dev/dm -3 partizione 15,4g 307,1m -1
$
L'opzione -Show accetta un elenco di valori che rappresentano le intestazioni della colonna. Per ottenere un ordine di output specifico, scegli le intestazioni della colonna desiderata e la sua sequenza.
Dimensione di scambio
Come regola generale delle dimensioni dello spazio di swap si consiglia di essere il doppio rispetto al sistema ha memoria fisica. Tienilo a mente per configurazioni e macchine desktop per scopi generali. Per i server UNIX/Linux con molta più memoria fisica è possibile ridurre la dimensione dello spazio di swap al 50% di RAM. I laptop che possono ibernazione devono essere leggermente più grandi della memoria fisica.
Installazione
Per una partizione di scambio, si consiglia di pensare allo spazio di scambio fin dall'inizio della divisione del disco in singole partizioni o di lasciare abbastanza spazio su disco inutilizzato per usarlo in seguito, eventualmente. Di solito, durante la configurazione dei dischi da utilizzare, la routine di configurazione ti chiede delle dimensioni dello spazio di swap. Ad esempio, su Debian GNU/Linux questo sembra segue:
Come accennato in precedenza, fintanto che hai spazio per nuove partizioni sul tuo harddisk puoi creare e includere partizioni di scambio con l'uso di comandi come FDisk e Swapon.
In alternativa, lo spazio di scambio può anche essere abilitato in seguito come file di swap. Linux lo supporta in questo modo in modo da poter creare, prepararlo e montarlo in modo simile a quello di una partizione di swap. Il vantaggio di in questo modo è che non è necessario ripartire un disco per aggiungere ulteriore spazio di swap.
Ad esempio, creiamo un file denominato /swapfile con una dimensione di 512 m e consentiamo questo come spazio di swap aggiuntivo. Innanzitutto, con l'aiuto del comando DD creiamo un file vuoto. In secondo luogo, MKSWAP utilizza questo file per trasformarlo in stile swap. È possibile notare che il contenuto del file è trattato come una partizione e viene assegnato un UUID corrispondente. Terzo, lo abilitiamo usando Swapon. Infine, il comando swapon -show visualizza due voci di swap: una partizione e il file appena creato.
# dd if =/dev/zero di =/swapfile bs = 1024 conteggio = 524288Per utilizzare questo file di swap al momento dell'avvio aggiungi, come amministratore, la seguente riga nel file /etc/fstab:
Disabilitare uno spazio di swap
Meno ma non ultimo c'è un comando per disabilitare il file di swap, di nuovo. Il comando è chiamato scambiare
. Richiede un singolo parametro che indica che il dispositivo di swap sia disabilitato. Questo comando disabilita il file di swap precedentemente attivato:
Anche, scambiare
può funzionare con l'UUID di un file system. Produrre scambiare
Agisci in questo modo usa l'opzione -U
seguito dall'UUID del file system secondo. Nel caso sia necessario disabilitare tutti gli spazi di swap contemporaneamente l'opzione -UN
(Long Option -All) è abbastanza utile. Il comando completo è SWAPOFF -A.
Sintonizzare l'ecosistema di swap
A partire da Linux Kernel Release 2.6 È stato introdotto un nuovo valore. Questo è memorizzato nella variabile /proc/sys/vm/swappiness
e controlla il peso relativo dato allo scambio di memoria di runtime, invece di far cadere le pagine di memoria dalla cache della pagina del sistema [2]. Il valore predefinito è del 60 (percentuale di memoria prima di attivare lo scambio). Più basso è il valore, minore è lo scambio e più pagine di memoria sono mantenute nella memoria fisica.
Per impostare il valore impostare temporaneamente il valore nel file system /proc come segue:
# Echo 10>/Proc/sys/VM/SWAppiness
In alternativa puoi usare il sysctl
comando come segue:
# sysctl -w vm.SWAPPINESS = 10
Per impostare il valore aggiungi in modo permanente la riga seguente al file /etc/sysctl.Conf:
VM.SWAPPINESS = 10
È ancora aggiornato?
Puoi chiederti perché ci occupiamo di quell'argomento. I computer moderni hanno abbastanza memoria fisica - quindi perché dobbiamo preoccuparci? Ci sono alcuni motivi per cui questa tecnologia vale più di un pensiero.
Tieni presente che rimani con la macchina per un po ', ma potresti aggiornare il software che usi di tanto in tanto. Attualmente, sia l'hardware che il software si adattano l'un l'altro. In futuro potrebbe cambiare e hai bisogno di più memoria di quello che hai ora. A meno che l'aggiornamento o l'acquisto di un nuovo hardware una partizione di swap possa risparmiare un po 'di denaro.
Potresti aver sentito parlare di una funzione chiamata sospensione su disco o modalità ibernazione [3]. La tua macchina sta per dormire. Prima di farlo deve conservare il suo stato attuale da qualche parte. Ora lo spazio di scambio entra in gioco e funge da contenitore per mantenere questi dati. Non appena la macchina si sveglia la prossima volta che l'intero dati viene letto dallo spazio di swap, caricati in memoria e puoi continuare a lavorare dove ti sei fermato prima.
Il sistema, se hai un solo dispositivo di archiviazione permanente, dovrà leggere e scrivere i tuoi file mentre si scambia sullo stesso dispositivo. Vedrai un enorme miglioramento se hai un secondo dispositivo e puoi separare il dispositivo di swap da accessi in conflitto.
Il file di swap deve passare i dati tramite il file system. Questo aggiunge un livello di indirezione, per far sembrare che esiste uno spazio contiguo di indirizzi logici con cui il kernel con cui lavorare. Questo aggiunge ulteriori cicli sovraccarico di memoria e CPU. Otterrai i migliori risultati utilizzando una partizione di scambio grezzo.
Ancora oggi la conoscenza riguardante lo swap è essenziale. Questo argomento fa parte delle conoscenze necessarie per passare il livello di certificato di Linux Professional Institute 1 (LPIC 1). La maggior parte degli esami contiene una o due domande su questo argomento.
Lo spazio di scambio aiuta il tuo sistema Linux (kernel) a organizzare rapidamente la memoria se ne è necessario. Per essere aperto con te, lo spazio di scambio non è assolutamente necessario nel caso in cui il sistema abbia tonnellate di RAM. In caso di emergenze aiuta il tuo sistema a sopravvivere. Ecco perché non lascerei mai il percorso di una configurazione tradizionale senza spazio di swap.
La combinazione di swap e SSD è discussa in modo controverso perché il numero di disco scrive su un SSD è piuttosto limitato. Sia lo swap che i file temporanei sono creati per scrivere molti dati. D'altra parte, gli SSD moderni hanno uno spazio aggiuntivo più che sufficiente (7%) per far fronte ai guasti del settore. Essere al sicuro: se possibile, avere uno scambio separato su un disco rigido convenzionale - non usare Ramdisk, né un SSD, almeno per lo swap. Il tuo sistema Linux ti ringrazierà per questa decisione.
Per evitare di mettere lo spazio di scambio sul tuo SSD potresti usare Zram, invece [5,6]. Questo è uno scambio virtuale compresso in RAM, chiamato anche ZSWAP. Questa tecnologia consente un dispositivo a blocchi compressi in memoria. Non appena non c'è più pagine di memoria di memoria vengono trasferite su questo dispositivo di blocco. Ciò si traduce in meno utilizzo di scambio e aiuta a prolungare anche la vita del tuo harddisk.
L'autore desidera ringraziare Mandy Neumeyer e Gerold Rupprecht per il loro supporto mentre prepara questo articolo.