Svuotare memoria SWAP

Con questi semplici comandi è possibile svuotare la memoria SWAP di una macchina Linux:

1 sudo swapoff -a
2 sudo swapon -a

—————————————————–

La memoria virtuale e` un metodo per far sembrare alle applicazioni
che sia disponibile piu` memoria Ram (quella fisica, veloce, costosa,
ed in quantita` spesso insufficiente) di quella effettivamente
installata. Per questioni di efficenza, la memoria viene suddivisa in
“zone”, dette “pagine”, che appartengono ad una applicazione.

Su un pc moderno, e` facile avere piu` applicazioni aperte nello
stesso momento, ed aprirne di nuove o e chiuderne altre
continuamente. Si fa allora credere ad ogni applicazione di avere
tutta la memoria fisica a sua disposizione; quando una nuova processo
viene eseguito ed un altro viene richiamato, esso fara` delle
richieste di pagine di memoria. Se la Ram non e` sufficiente a
contenere queste nuove richieste, risulta necessario liberare spazio.

Lo spazio viene liberato spostando le pagine dalla memoria Ram ad una
parte del disco fisso (molto piu` lento della Ram ma anche molto piu`
capiente) deputata a questo scopo: la swap. La scelta delle pagine da
spostare puo` richiedere algoritmi molto sofisticati, ma
principalmente possiamo vederla su base temporale: se una pagina non
e` stata richiesta da diverso tempo e` probabile che non lo sara` a
breve, e quindi puo` essere spostata tranquillamente.

Questo e`, per sommi capi, il funzionamento della memoria virtuale (un
libro di Sistemi Operativi e` sicuramente piu` esauriente e
preciso…).

Linux utilizza una partizione apposita da dedicare alla swap (al
contrario di Windows che usa un file, il “pagefile.sys”). La
grandezza di questa partizione, o di queste partizioni, stabilisce la
quantita` di swap disponibile sul sistema.

Un tempo, quando la memoria Ram era cara e la sua quantita` molto
limitata sui computer, si era soliti creare una partizione di swap di
grandezza parti al doppio della Ram installata sul calcolatore (questo
consiglio e` ancora valido nel caso si voglia riciclare un pc un po`
datato con meno di 128Mb di Ram). Ora che, invece, il prezzo e` sceso
e le quantita` spesso raggiungono 1 Gb, non si ha piu` questa
necessita` ed a volte ha senso proprio non disporre affatto di swap.

A volte, invece, la swap risulta fondamentale: se vogliamo avere il
supporto al suspend-to-disk, per esempio, si ha bisogno di avere
almeno tanta swap quanta memoria fisica, ma viene consigliato di
creare la partizione almeno 1.5-2 volte la memoria fisica.

L’utilizzo della swap e` anche un modo per incrementare le
performance: spostando le pagine memoria scarsamente utilizzate sul
disco, viene liberata Ram che puo` essere utilizzata come disk cache e
per essere rimpiazzata da memoria acceduta piu` frequentemente. Non
sempre, quindi, e` conveniente rimuovere la swap, anche in presenza di
elevati quantitativi di Ram fisica.

Permette anche di degradare le prestazioni gradualmente: senza swap
incorreremo in problemi di applicazioni uccise per liberare spazio
(OOM killer) o in errori nel salvare dati a causa del fallimento ad
allocare memoria.

Una partizione di swap, in quanto utilizzata solo quando un sistema
operativo e` in funzione (a parte il caso del suspend-to-disk), e dal
momento che nello stesso momento soltanto un sistema operativo puo`
essere in esecuzione su una comune macchina, e` possibile far
condividire questa partizione tra installazioni differenti di
distribuzioni Linux.

Alcuni comando utili per gestire la swap

o mkswap
Prepara un’area di swap su un device o un file; utile anche per
ricreare una partizione di swap nel caso si supponga che sia
corrotta

o swapon
Attiva un’area di swap

o swapoff
Disattiva un’area di swap

o cat /proc/swaps
Mostra le informazioni sulle aree si swap attualmente utilizzate

o vmstat
Restituisce informazioni sulla memoria virtuale

Aspetti avanzati
================

Linux supporta anche i file di swap; nel caso fosse difficile
creare/incrementare una partizione di swap ma si necessiti di piu`
spazio, e` possibile creare un file ed utilizzare quello come area di
swap:

# dd if=/dev/zero of=/fileswap bs=1024k count=32
# sync
# mkswap /fileswap
# swapon /fileswap
# cat /proc/swaps

e` anche possibile far si` che questo file venga utilizzato dal boot,
aggiungendo questa riga al file /etc/fstab:

/fileswap none swap sw 0 0

L’utilizzo di file di swap e` un metodo per avere a disposizione una
quantita` di memoria swap superiore a quella definita nelle partizione
(che solitamente viene creata al momento dell’installazione), magari
come soluzione temporanea da un carico di lavoro molto intenso, ma
contenuto nel tempo. Naturalmente, le prestazioni con l’utilizzo di un
file di swap sono molto minori di quelle che si hanno con una
partizione dedicata.

In alcune macchine molto cariche, per esempio server di produzione, la
swap diventa molto importante; solitamente queste macchine dispongono
di sottosistemi dischi molto veloci e spesso con piu` di un hard disk:
per incrementare le prestazioni e` consigliabile creare una partizione
di swap su ogni disco e definire quelle aree di memoria con stessa
priorita` (che descrive dove vengono scritte le pagine da mettere in
swap) in modo che le pagine di memoria da spostare siano scritte in
round-robin su tutte le partizioni.

Un altro fattore che puo` influire sulle prestazioni della swap e` la
posizione della sua partizione nel disco. La teoria vorrebbe che la
parte piu` veloce del disco sia all’inizio (la parte piu` esterna, i
cilindri che iniziano con 1, per intendersi) ma questo solo in teoria:
infatti in questo caso diventa importante anche il tempo di seek della
testina.

Considerando, infatti, che solitamente la testina si trova a fine
disco (in posizione di riposo) una grande richiesta di swap
provocherebbe un continuo avanti ed indietro della testina da una
parte all’altra dei piatti, inficiando le prestazioni: il transfer
rate non diventa piu` rilevante, in quanti ci si trova a dover
aspettare che il disco trovi i settori giusti.

Un’alternativa sarebbe quella di posizionarla a meta` del disco, in
quanto mediamente la testina dovra` accedere ad altri dati, e quindi
“passar sopra” alla swap.

E` comunque da considerare che l’accesso al disco e` diversi ordini di
grandezza piu` lento di quello alla memoria, quindi il guadagno
potrebbe essere minimo utilizzando questi consigli.

Nel kernel 2.6 e` presente la possibilita` di impostare la
“swappiness” (la propensione da parte del kernel all’utilizzo della
swap) modificando il file /proc/sys/vm/swappiness. La variabile puo`
essere impostata ad un valore tra 0 e 100 dove numeri bassi indicano
al kernel di fare meno ricorso alla swap.

Indicando al kernel la tendenza a effettuare lo swap delle pagine di
memoria, permette di adattare meglio la strategia di swapping a
seconda delle proprie esigenze: un utilizzo desktop richiede che se
un’applicazione e` aperta, ma non utilizzata da 10 ore,
selezionandola, essa deve essere pronta subito, senza attendere alcun
ritardo dovuto alla necessita` di ricaricare le pagine dalla swap. Per
un utilizzo server, invece, avere molto memoria libera e magari
attendere qualche attimo per caricare pagine scarsamente accedute, e`
decisamente accettabile.

Da una parte si cerca la migliore interattivita` verso il sistema,
dall’altra parte si necessita` di fornire il maggior numero di servizi
al maggior numero di persone possibile. I due utilizzi portano a voler
impostare, rispettivamente, un valore basso ed alto di swappiness. Con
le dovute eccezioni: l’indice di un proxy server (squid) e`
fondamentale sia _interamente_ contenuta in Ram fisica.

Taggato su:
Loading Facebook Comments ...

Lascia un commento