Indice dei contenuti dell'articolo:
Ciò che risuona negli ambienti informatici sono le molteplici opinioni sull’utilizzo dello Swap. Si riscontrano vari punti di vista: da coloro che seguono l’idea tradizionale, secondo la quale lo Swap “deve essere il doppio della RAM”, a coloro che affermano che “oggi non è più necessario, dato che la RAM di cui disponiamo è più che sufficiente”. Allo stesso tempo, ci sono argomentazioni che sostengono che un sistema “senza Swap è più veloce”, mentre altri sostengono il contrario. Con la RAM diventata più accessibile in termini di costi nel 2015, ci si domanda se valga ancora la pena di riservare dello spazio su disco per lo Swap. La risposta rapida è: Sì, ne vale la pena. Per capire meglio, analizziamo la situazione in dettaglio.
Memoria Virtuale: Un’Introduzione
Durante i miei studi universitari, ho avuto l’opportunità di seguire due corsi con il prof. Montesi dell’Università di Bologna (insegnava anche a Camerino) prendendo in riferimento sistemi Unix ed il testo del Tanenbaum. Da allora, l’argomento è diventato una mia profonda passione.
Ogni dispositivo informatico è dotato di RAM, una memoria ad accesso rapido che ospita i dati in uso. Essa è molto veloce, decisamente più di qualsiasi disco fisso (anche delle moderne SSD), e rappresenta una delle componenti principali che determinano la velocità operativa di una macchina, sia essa un server, un computer tradizionale, uno smartphone, un tablet, ecc.
La memoria virtuale è la somma della RAM e dello spazio che definiamo come Swap, ovvero uno spazio su un dispositivo di memorizzazione più lento che viene utilizzato quando il sistema deve liberare una certa quantità di memoria ad accesso rapido (RAM).
Il sistema operativo decide cosa mantenere pronto per l’uso e cosa ‘parcheggiare’ in un luogo meno accessibile, ma comunque disponibile. La memoria totale vista dal sistema operativo è quindi la somma di RAM e Swap. Superare questo limite porterà il sistema a generare messaggi di OOM (Out Of Memory) e a gestire la situazione in maniera dipendente dal sistema operativo in uso.
Swap: Caratteristiche e Gestione
La gestione dello Swap varia tra i vari sistemi operativi, ma il concetto di base rimane:
Lo Swap è uno spazio su un dispositivo più lento che viene utilizzato come estensione della memoria RAM
Storicamente, Windows ha gestito lo Swap tramite un file presente nel file system principale. La sua dimensione è dinamica e cresce con l’aumento delle esigenze, viene utilizzato principalmente quando la RAM della macchina comincia ad essere piena.
Nei sistemi Unix-Like, che includono famiglie di sistemi operativi come *BSD e GNU/Linux, lo Swap è solitamente allocato in una partizione dedicata, progettata e ottimizzata per questo scopo specifico. Questa scelta architetturale si basa su un principio fondamentale: i file system sono progettati per gestire file.
Questo include l’implementazione di permessi di accesso, il tracciamento degli orari di creazione e modifica, la gestione dell’integrità dei dati e altre funzionalità che vanno oltre la semplice lettura e scrittura di dati sul dispositivo.
Aggiungere allo Swap queste complessità potrebbe non solo rallentare il processo di gestione della memoria, ma anche appesantire il file system rendendolo più complesso. Pertanto, per evitare questi problemi, la partizione di Swap è dedicata esclusivamente allo Swap, liberando il sistema operativo dall’obbligo di eseguire tutti questi controlli e processi aggiuntivi.
L’opzione degli Swap-File nei sistemi Unix-Like
Nonostante la tradizione dell’uso di partizioni dedicate per lo Swap nei sistemi Unix-Like, esiste anche la possibilità di utilizzare un file di swap. Questa alternativa può essere particolarmente conveniente in determinate circostanze o quando è richiesta una gestione più flessibile della memoria.
Gli swap-file, a differenza delle partizioni di Swap, sono file speciali all’interno del file system che possono essere utilizzati per archiviare temporaneamente dati dalla RAM. Questa opzione offre una certa flessibilità in quanto la dimensione di uno swap-file può essere modificata dinamicamente, a differenza di una partizione di Swap che ha una dimensione fissa una volta creata.
Per facilitare la gestione degli swap-file, sono stati sviluppati diversi programmi. Questi strumenti permettono di gestire dinamicamente gli swap-file, creandoli, aumentandone o diminuendone la dimensione, o rimuovendoli completamente, a seconda delle esigenze reali del sistema. Questa flessibilità può essere particolarmente utile in scenari in cui le esigenze di memoria del sistema possono variare notevolmente, come nel caso di server con carichi di lavoro variabili o sistemi con risorse di memorizzazione limitate.
Necessità dello Swap in Presenza di Ampia RAM
Un interrogativo che spesso sorge riguardo l’utilizzo dello Swap è il seguente:
Se ho tanta RAM, molto più di quanto mi serve, perché dovrei comunque creare uno spazio di Swap?
Questa domanda è logicamente valida ed ha un senso, ma la risposta richiede una comprensione più approfondita di come i Sistemi Operativi, come GNU/Linux, gestiscono la memoria.
Esistono due ragioni fondamentali che giustificano l’utilizzo dello Swap, anche quando si dispone di molta RAM:
1. Ottimizzazione della gestione della RAM
Innanzitutto, i Sistemi Operativi come GNU/Linux gestiscono la RAM in modo molto intelligente, cercando di sfruttarla al massimo. Non esiste, per così dire, della RAM “inutile” o “inutilizzata”: qualsiasi spazio libero viene utilizzato per fare cache delle letture e scritture sui dischi, rendendo le operazioni di I/O più veloci e reattive.
In questa ottica, lo Swap diventa utile perché permette di liberare la RAM da applicazioni che non sono state utilizzate da un certo periodo di tempo. Queste vengono “swappate”, ovvero i loro dati in RAM vengono spostati nello Swap. Questa operazione libera spazio in RAM che può essere utilizzato per aumentare la cache dei dischi o per gestire eventuali picchi di carico. L’intensità di questa operazione è regolata dall’impostazione della swappiness, un parametro del kernel che decide quanto il sistema dovrebbe cercare di utilizzare lo Swap rispetto alla RAM.
2. Supporto all’ibernazione
In secondo luogo, quasi tutte le distribuzioni di GNU/Linux utilizzano lo Swap come spazio di memorizzazione dati in caso di ibernazione. Durante l’ibernazione, il contenuto della RAM viene “congelato” e copiato nello Swap. Questo permette al sistema di spegnersi completamente, risparmiando energia, ma di riprendere esattamente da dove si era lasciato al successivo avvio. Per supportare questa funzionalità, lo Swap dovrebbe essere almeno grande quanto la RAM stessa, per garantire che tutto il contenuto della RAM possa essere salvato.
In molti casi, è possibile operare anche senza Swap, ma la sua presenza può migliorare l’efficienza di gestione delle risorse, la reattività del sistema e la flessibilità di funzioni come l’ibernazione. Pertanto, anche se si dispone di una grande quantità di RAM, la creazione di uno spazio di Swap è spesso una buona pratica.
Dimensionamento della Partizione di Swap
La decisione sulla dimensione da assegnare alla partizione di Swap è uno degli aspetti più discussi quando si tratta di configurazione dei sistemi operativi. Non esiste, infatti, una risposta definitiva a questa domanda, in quanto varia in base alle esigenze specifiche di ogni sistema e alla quantità di RAM disponibile.
C’era un tempo in cui si consigliava che la partizione di Swap dovesse essere il doppio della RAM. Tuttavia, erano gli anni in cui la memoria del computer era misurata in Megabyte e non in Gigabyte come accade oggi. In quel contesto, raddoppiare la RAM era una pratica comune per assicurarsi che ci fosse abbastanza memoria virtuale disponibile per le operazioni del sistema.
Nel mondo moderno, dove la RAM è misurata in Gigabyte, e spesso si hanno quantità di RAM molto generose, questa regola non è più così rilevante. Per i sistemi che necessitano di ibernazione, un suggerimento potrebbe essere quello di assegnare allo Swap una dimensione leggermente maggiore rispetto alla quantità di RAM disponibile. Questo perché, come accennato prima, il contenuto della RAM viene copiato nello Swap durante l’ibernazione.
Per i sistemi che non necessitano di questa funzionalità, come ad esempio i server, la dimensione dello Swap può essere valutata caso per caso. Tuttavia, si consiglia generalmente di riservare sempre almeno un paio di GB per gestire eventuali picchi di carico. Se ci fosse un aumento improvviso della necessità di memoria e non fosse possibile modificare le partizioni, si potrebbe sempre ricorrere all’utilizzo di uno swap-file, che può essere fissato o allocato dinamicamente in base alle necessità.
Un aspetto importante da considerare riguarda la sicurezza dei dati. Nello Swap vengono memorizzate porzioni di memoria RAM, il che significa che è possibile analizzare lo spazio anche dopo lo spegnimento del computer e potenzialmente trovare dati sensibili come password o informazioni personali. Per coloro che sono particolarmente preoccupati per la sicurezza dei dati, esiste la possibilità di crittografare la partizione di Swap. Questo può essere fatto sia con una chiave fissa, che viene richiesta ad ogni avvio del sistema, sia con una chiave generata dinamicamente ad ogni avvio, che si invalida allo spegnimento della macchina, aumentando così il livello di protezione dei dati.