Bisogno urgente di RAM?


Non parlo di costosa memoria RAM fisica, ma di spazio da usare come memoria volatile, anche se volatile non è. Chiarisco: si tratta di swap, ossia di una parte – di dimensione arbitraria – di hard-disk che viene usata come estensione della memoria di lavoro a disposizione del computer. In genere tutti coloro che si affacciano sul mondo linux e che quindi hanno a che fare almeno con un’installazione – fosse anche la semplicissima procedura di Ubuntu – hanno acquisito il concetto di swap come partizione supplementare che non contiene dati stabili, ma che viene trattata dal sistema operativo come memoria ad accesso casuale. Ma lo swap non è solo questo. Altri sistemi operativi hanno previsto l’esistenza di swap senza una partizione dedicata, ma all’interno di un unico file. E GNU-Linux permette anche questo tipo di swap, che si rivela particolarmente utile in situazioni nelle quali un unico compito richiede molta più memoria di quella a cui il sistema sia abituato. Se ci stiamo imbarcando in un’impresa computazionale che richiede una quantità inusuale di memoria RAM e non abbiamo previsto per questo tipo di operazioni una partizione a parte, impiegheremo circa 30 secondi (o poco più a dipendenza della dimensione necessitata e della velocità di scrittura dell’hard-disk) e pochissimi semplici comandi per procurarcela.

Swap su file

I passi sono i seguenti (sia ben chiaro che i premessi di root sono necessari):

  1. Creare un file della dimensione voluta
  2. Creare uno spazio di swap su questo file
  3. Attivare lo spazio appena creato

Per il primo compito si usa il potentissimo quanto spesso ignorato comando dd. Si tratta di un copiatore binario di stream e non ho la minima intenzione di approfondire né quest’affermazione né il comando in sé. Ad ogni modo si tratta di creare un file binario, con tutti i bit settati su 0 (non che sia assolutamente necessario, ma a qualcosa bisogna pur settarli, questi bit), di una determinata dimensione. Il comando è il seguente:

sudo dd if=/dev/zero of=/mnt/1GB.swap bs=1M count=1024

L’esempio mostrato qui sopra è per un file di 1 GB. Spiego rapidamente il comando:

  • Naturalmente sudo è per i permessi di root (eventualmente bisognerà usare altri metodi, per esempio attraverso su, per impadronirsi di tali permessi, qualora sudo non fosse presente nel sistema o non fosse utilizzabile) e dd è il nome del comando.
  • L’argomento if specifica il file di input. /dev/zero è il device per il bit zero. In pratica vengono letti “pezzi di zero” e copiati nell’output.
  • L’argomento of specifica l’output. In questo caso piazziamo il file nella directory /mnt/ e lo chiamiamo 1GB.swap. Non c’è alcun tipo di restrizione sul percorso o il nome del file. L’importante è piazzarlo in una partizione che abbia spazio per accoglierlo. Naturalmente, più veloce è il disco e migliore sarà il risultato, quindi se abbiamo più di un disco fisso e uno dei due fosse più rapido dell’altro (per esempio se uno dei due ha una velocità di rotazione maggiore) oppure, per questioni di utilizzo, deve sopportare un minor carico di lettura/scrittura, scegliamo una partizione su questo disco.
  • L’argomento bs specifica la dimensione del blocco, ossia della quantità di byte che viene copiata alla volta. Non è rilevante per il risultato, ma solo per la velocità con cui il file viene creato. Il valore migliore dipende da molti fattori. 1 MB, come in questo caso, è una scelta quasi sempre ragionevole.
  • L’argomento count specifica la quantità totale di blocchi che devono essere copiati. Nel nostro caso, 1024 blocchi di 1 MB ciascheduno significa un ammontare di 1 GB. Se avete scelto una dimensione di blocco diversa dovrete modificare anche questo argomento per avere un file di 1 GB.

Una volta creato il file siamo praticamente alla fine. Per creare uno spazio di swap su quel file si utilizza il semplice comando mkswap, che ha la stessa sintassi di base dei comandi per generare filesystem come ext3. Vediamo il comando:

sudo mkswap /mnt/1GB.swap

Il comando è autoesplicativo e molto semplice. L’ultimo passo riguardo l’attivazione di questo spazio di swap:

sudo swapon /mnt/1GB.swap

A questo punto il comando free o qualunque altro sistema di monitoraggio delle risorse di sistema ci assicureranno che la quantità di swap a disposizione è aumentato di 1 GB. Il sistema operativo deciderà da solo quando usare la RAM fisica e quando lo spazio di swap appena creato o gli altri preesistenti o creati successivamente. Non c’è limite (sempre entro i limiti della ragionevolezza) al numero di partizioni o di file di swap da concedere al sistema, ma non si creda di cambiare le prestazioni della swap tramite l’utilizzo di più o meno spazi di swap, a meno che non si usino diversi dischi per più spazi, nel qual caso il carico distribuito contribuisce ad un possibile incremento della rapidità. Né si creda di poter vivere sullo swap: il disco fisso è di diversi ordini di grandezza più lento della RAM fisica. Lavorare sullo swap tutto il tempo diventa rapidamente frustrante e rischia anche di ridurre la vita dell’hard-disk a causa del continuo leggi-scrivi-cancella; un sistema del genere occupa più tempo a gestire le varie richieste di memoria dentro e fuori dalla RAM fisica (l’unica a cui la CPU può accedere direttamente) che a eseguire i programmi veri e propri.

Se un file non è più necessario – per esempio se il compito da svolgere è terminato -, si può disattivare lo spazio di swap tramite il comando swapoff:

sudo swapoff /mnt/1GB.swap

Il file così smontato può essere eliminato per far posto ad altro.

Un’altra opzione è quella di rendere permanente questo spazio di swap: il file creato con i primi due passaggi viene mantenuto sull’hard-disk e si modifica il file /etc/fstab in modo che il sistema monti questo spazio di swap all’avvio. Sarà sufficiente aggiungere la seguente riga nel file:

/mnt/1GB.swap  none  swap  sw  0 0

Naturalmente, se avete chiamato in modo differente il file, adattate la riga alle vostre necessità.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: