Kernel Linux

Spazio di scambio della gestione della memoria del kernel Linux

Spazio di scambio della gestione della memoria del kernel Linux

Prima parte. Lo spazio di scambio

Per funzionare correttamente un computer dipende dall'avere una quantità adeguata di memoria. Semplicemente dicendo che non ce ne sarà mai abbastanza. Più memoria fisica è installata, più è costosa. Per lo più, il risultato è un intelligente compromesso tra costi e velocità di accesso alle celle di memoria.

Per raggiungere questo compromesso, i sistemi UNIX/Linux combinano due tipi di memoria: la memoria fisica (RAM) e lo spazio di swap. Nel complesso questa è chiamata la memoria virtuale di un sistema informatico. La memoria fisica è piuttosto costosa ma veloce e accessibile in nanosecondi. Al contrario, la memoria di swap è piuttosto economica, ma lenta e accessibile in pochi millisecondi.

Esistono alcuni motivi per cui la memoria di scambio è utile. Primo, a volte i singoli processi richiedono più memoria di quella che il sistema possiede fisicamente e possono fornire di più ai processi che la richiedono. Di conseguenza, tutti i dati che sono conservati nella memoria fisica non possono più essere archiviati lì. Ora entra in gioco lo spazio di swap e una selezione di pagine di memoria viene trasferita nello spazio di swap per liberare memoria fisica.

In secondo luogo, non tutti i dati sono necessari in memoria contemporaneamente. Ecco perché le pagine di memoria meno utilizzate vengono parcheggiate nello spazio di swap per avere a disposizione quanta più memoria fisica libera possibile. Questo metodo è denominato Algoritmo di sostituzione della pagina utilizzato di recente (LRU) [1].

Tipi di scambio

Lo spazio di scambio esiste in due varianti. La versione 1 è una partizione del disco separata, la cosiddetta partizione di swap swap. Non ci sono file memorizzati su quella partizione ma informazioni sulla memoria (dump). Semplicemente, la versione 2 è un file su un disco che risiede nel file system sul tuo disco rigido. La versione 1 è molto comune sui sistemi UNIX/Linux, BSD e OS X, mentre la versione 2 esiste sui sistemi che eseguono Microsoft Windows. La versione 2 può essere abilitata anche su sistemi UNIX/Linux (vedi sotto).

Per vedere quale spazio di swap è attivo sul tuo sistema UNIX/Linux, esegui il seguente comando in un terminale:

$ /sbin/swapon -s
Nome file      Tipo       Dimensione        Usato      Priorità
/dev/dm-3   partizione  16150524   316484  -1
$

In alternativa puoi 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 in uso oltre 300M, attualmente. La colonna Priorità mostra quale spazio di swap usare per primo. Il valore predefinito è -1. Più alto è il valore di priorità, prima viene preso in considerazione questo spazio di swap. L'opzione -s è la versione breve di -summary. Questa opzione è deprecata e si consiglia invece di utilizzare l'opzione -show come segue:

$ /sbin/swapon --show=NOME,TIPO,DIMENSIONE,USATO,PRIO
NOME       TIPO        TAGLIA   UTILIZZATO PRIO
/dev/dm-3 partizione 15,4G 307,1M   -1
$

L'opzione -show accetta un elenco di valori che rappresentano le intestazioni di colonna. Per ottenere un ordine di output specifico, scegli le intestazioni di colonna desiderate e la sua sequenza.

Cambia taglia

Come regola generale, si consiglia di raddoppiare la dimensione dello spazio di swap rispetto alla memoria fisica del sistema. Tienilo a mente per configurazioni generiche e macchine desktop. Per i server UNIX/Linux con molta più memoria fisica è possibile ridurre la dimensione dello spazio di swap al 50% della RAM. I laptop che possono andare in letargo devono essere leggermente più grandi della memoria fisica.

Installazione

Per una partizione di swap, si consiglia di pensare allo spazio di swap fin dall'inizio della suddivisione del disco in singole partizioni o di lasciare abbastanza spazio inutilizzato per utilizzarlo in seguito, eventualmente. Di solito, durante la configurazione dei dischi da utilizzare, la routine di installazione ti chiede la dimensione dello spazio di swap. Ad esempio, su Debian GNU/Linux questo appare come segue:

Come accennato in precedenza, finché hai spazio per nuove partizioni sul tuo disco rigido puoi creare e includere partizioni di swap con l'uso di comandi come fdisk e swapon.

In alternativa, lo spazio di scambio può anche essere abilitato in seguito come file di scambio. Linux supporta questo modo in modo che tu possa crearlo, prepararlo e montarlo in un modo simile a quello di una partizione di swap. Il vantaggio di questo modo è che non è necessario ripartizionare un disco per aggiungere ulteriore spazio di swap.

Ad esempio, creiamo un file chiamato /swapfile con una dimensione di 512M e lo abilitiamo come spazio di swap aggiuntivo. Innanzitutto, con l'aiuto del comando dd creiamo un file vuoto. Secondo, mkswap usa questo file per trasformarlo in uno stile di scambio. Potresti notare che il contenuto del file viene trattato come una partizione e viene assegnato un UUID corrispondente. Terzo, lo abilitiamo usando swapon. Infine, il comando swapon -show mostra due voci di swap: una partizione e il file appena creato.

# dd if=/dev/zero of=/swapfile bs=1024 count=524288
524288+0 set di dati in
524288+0 set di dati in uscita
536870912 byte (537 MB) copiati, 0,887744 s, 605 MB/s
# mkswap /swapfile
Configurazione dello spazio di scambio versione 1, dimensione = 524284 KiB
nessuna etichetta, UUID=e47ab7fe-5efc-4175-b287-d0e83bc10f2e
# swapon /swapfile
# swapon --show=NOME,TIPO,TAGLIA,USATO,PRIO
NOME      TIPO        TAGLIA   UTILIZZATO PRIO
/dev/dm-3 partizione 15,4G 288,9M   -1
/swapfilefile       512M       0B   -2
#

Per utilizzare questo file di scambio all'avvio aggiungi, come amministratore, la seguente riga al file /etc/fstab:

/swapfile  none    swap  sw   0   0

Disabilitare uno spazio di scambio

Ultimo ma non ultimo c'è un comando per disabilitare il file di scambio, di nuovo. Il comando si chiama scambiare. Richiede un unico parametro che indichi il dispositivo di scambio da disabilitare. Questo comando disabilita il file di scambio attivato in precedenza:

# swapoff /swapfile

Anche, scambiare può funzionare con l'UUID di un file system. Produrre scambiare agisci in questo modo usa l'opzione -tu seguito dall'UUID del file system corrispondente. Nel caso sia necessario disabilitare tutti gli spazi di swap contemporaneamente l'opzione -un (opzione lunga -all) è abbastanza utile. Il comando completo è swapoff -a.

Ottimizzazione dell'ecosistema di scambio

A partire dalle versioni del kernel Linux 2.6 è stato introdotto un nuovo valore. Questo è memorizzato nella variabile /proc/sys/vm/swappinesse controlla il peso relativo dato allo swapping della memoria di runtime, invece di eliminare le pagine di memoria dalla cache delle pagine di sistema [2]. Il valore predefinito è 60 (percentuale di memoria libera prima di attivare lo scambio). Più basso è il valore, meno swapping viene utilizzato e più pagine di memoria vengono 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 sistema comando come segue:

# sysctl -w vm.swappiness=10

Per impostare il valore in modo permanente aggiungere la seguente riga al file /etc/sysctl.conf:

vm.scambio = 10

Lo scambio è ancora aggiornato??

Potresti chiedere perché trattiamo questo argomento. I computer moderni hanno abbastanza memoria fisica, quindi perché dobbiamo preoccuparcene?? Ci sono alcuni motivi per cui questa tecnologia vale più di un pensiero.

Tieni presente che rimani con la tua macchina per un po', ma di tanto in tanto potresti aggiornare il software che usi su di essa. Attualmente, sia l'hardware che il software si adattano l'uno all'altro. In futuro potrebbe cambiare e avrai bisogno di più memoria di quella che hai ora. A meno che l'aggiornamento o l'acquisto di nuovo hardware, una partizione di swap possa farti risparmiare un po' di soldi.

Potresti aver sentito parlare di una funzione chiamata sospensione su disco o modalità di ibernazione [3]. La tua macchina sta andando a dormire. Prima di farlo deve memorizzare il suo stato attuale da qualche parte. Ora entra in gioco lo spazio di scambio e funge da contenitore per conservare questi dati. Non appena la macchina si riattiva la prossima volta vengono letti tutti i dati dallo spazio Swap, caricati in memoria, e si può continuare a lavorare da dove si era fermato prima.

Il sistema, se dispone di un solo dispositivo di archiviazione permanente, dovrà leggere e scrivere i file durante lo scambio sullo stesso dispositivo. Vedrai un enorme miglioramento se hai un secondo dispositivo e puoi separare il dispositivo di scambio dagli accessi ai file in conflitto.

Il file di scambio deve passare i dati attraverso il file system. Questo aggiunge uno strato di indiretto, per far sembrare che ci sia uno spazio di indirizzamento logico contiguo con cui il kernel può lavorare. Questo aggiunge ulteriore sovraccarico di memoria e cicli della CPU. Otterrai i migliori risultati usando una partizione di swap non elaborata.

Conclusione

Anche oggi la conoscenza dello Swap è fondamentale. Questo argomento fa parte delle conoscenze necessarie per superare il Linux Professional Institute Certificate Level 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 ce n'è bisogno. Per essere aperti con te, lo spazio di scambio non è assolutamente necessario nel caso in cui il tuo sistema abbia tonnellate di RAM. In caso di emergenza aiuta il tuo sistema a sopravvivere. Ecco perché non lascerei mai il percorso di una configurazione tradizionale senza spazio di scambio.

La combinazione di Swap e SSD è discussa in modo controverso perché il numero di scritture su disco su un SSD è piuttosto limitato. Sia i file di swap che quelli temporanei sono creati per scrivere molti dati. D'altra parte, i moderni SSD hanno spazio aggiuntivo più che sufficiente (7%) per far fronte ai guasti del settore. Per essere sicuri: se possibile, avere uno Swap separato su un disco rigido convenzionale - non utilizzare ramdisk, né un SSD, almeno per lo swap [4]. Il tuo sistema Linux ti ringrazierà per questa decisione.

Per evitare di mettere lo spazio di swap sul tuo SSD potresti usare ZRAM, invece [5,6]. Questo è Virtual Swap Compresso in RAM, chiamato anche zSwap. Questa tecnologia abilita un dispositivo a blocchi compressi in memoria. Non appena termina la memoria, le pagine di memoria vengono trasferite a questo dispositivo a blocchi. Ciò si traduce in un minore utilizzo dello swap e aiuta anche a prolungare la vita del tuo disco rigido.

Link e riferimenti

Serie Linux per la gestione della memoria

Ringraziamenti

L'autore desidera ringraziare Mandy Neumeyer e Gerold Rupprecht per il loro supporto durante la preparazione di questo articolo.

Come cambiare i pulsanti sinistro e destro del mouse su PC Windows 10
È abbastanza normale che tutti i mouse dei computer siano progettati ergonomicamente per gli utenti destrimani. Ma sono disponibili dispositivi mouse ...
Emula i clic del mouse passando il mouse utilizzando il mouse senza clic in Windows 10
L'uso di un mouse o di una tastiera nella postura sbagliata di un uso eccessivo può causare molti problemi di salute, tra cui tensione, sindrome del t...
Aggiungi i gesti del mouse a Windows 10 utilizzando questi strumenti gratuiti
Negli ultimi anni computer e sistemi operativi si sono notevolmente evoluti greatly. C'è stato un tempo in cui gli utenti dovevano usare i comandi per...