|
Contact me sending an e-mail (antispam defense activated) |
Title: La memoria swap Author: Sandro Tosi Last modified: 2004-11-10 (2004-10-28) (2004-10-27) 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 <device> 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. |