Ci sono alcuni aspetti diversi alla tua domanda.
Innanzitutto, qual è la tua definizione di "libero". In realtà non è così semplice come sembra in Linux (o in qualsiasi sistema operativo moderno).
Come Linux utilizza la RAM (molto semplificato)
Ogni applicazione può usare parte della tua memoria. Linux utilizza tutta la memoria altrimenti non occupata (tranne gli ultimi Mb) come "cache". Ciò include la cache delle pagine, le cache degli inode, ecc. Questa è una buona cosa: aiuta a velocizzare le cose. Sia la scrittura su disco che la lettura da disco possono essere velocizzate immensamente dalla cache.
Idealmente, hai abbastanza memoria per tutte le tue applicazioni e hai ancora diverse centinaia di Mb per la cache. In questa situazione, fintanto che le applicazioni non aumentano l'utilizzo della memoria e il sistema non sta lottando per ottenere spazio sufficiente per la cache, non è necessario alcuno scambio.
Una volta che le applicazioni richiedono più RAM, vanno semplicemente in parte dello spazio utilizzato dalla cache, riducendo la cache. La de-allocazione della cache è economica e abbastanza semplice da essere semplicemente eseguita in tempo reale: tutto ciò che si trova nella cache è solo una seconda copia di qualcosa che è già sul disco, quindi può essere semplicemente allocato all'istante o è qualcosa che vorremmo hanno dovuto irrigare su disco entro i prossimi pochi secondi in ogni caso .
Questa non è una situazione specifica di Linux: tutti i sistemi operativi moderni funzionano in questo modo. I diversi sistemi operativi potrebbero semplicemente riportare RAM libera in modo diverso: alcuni includono la cache come parte di ciò che considerano "libero" e altri no.
Quando si parla di RAM libera, è molto più significativo includere la cache, perché praticamente è gratuita: è disponibile se qualsiasi applicazione lo richiede. Su Linux, il free
comando riporta entrambi i modi: la prima riga include cache nella colonna RAM utilizzata e la seconda riga include cache (e buffer) nella colonna libera.
Come Linux usa lo swap (ancora più semplificato)
Dopo aver esaurito la memoria sufficiente per non disporre di memoria sufficiente per una cache funzionante, Linux potrebbe decidere di riassegnare parte della memoria dell'applicazione non utilizzata dalla RAM allo scambio.
Non lo fa secondo un taglio definito. Non è come raggiungere una certa percentuale di allocazione, quindi Linux inizia a scambiare. Ha un algoritmo piuttosto "fuzzy". Tiene conto di molte cose, che possono essere meglio descritte da "quanta pressione c'è per l'allocazione della memoria". Se c'è molta "pressione" per allocare nuova memoria, aumenterà le possibilità che alcuni vengano scambiati per fare più spazio. Se c'è meno "pressione", diminuirà queste possibilità.
Il tuo sistema ha un'impostazione di "swappiness" che ti aiuta a modificare il modo in cui viene calcolata questa "pressione". Normalmente non è consigliabile modificarlo affatto, e non consiglierei di modificarlo. Lo scambio è nel complesso una cosa molto positiva, anche se ci sono alcuni casi limite in cui danneggia le prestazioni, se si considerano le prestazioni complessive del sistema è un vantaggio netto per una vasta gamma di attività. Se riduci lo swappiness, lasci che la quantità di memoria cache si riduca un po 'più di quanto farebbe altrimenti, anche quando potrebbe essere davvero utile. Se questo è un compromesso abbastanza buono per qualsiasi problema tu abbia con lo scambio dipende da te. Dovresti solo sapere cosa stai facendo, tutto qui.
Esiste una situazione ben nota in cui lo swap danneggia davvero le prestazioni percepite su un sistema desktop, ed è in che velocità le applicazioni possono rispondere di nuovo all'input dell'utente dopo essere state lasciate inattive per lungo tempo e avere processi in background pesanti in IO (come un backup notturno) eseguito. Questa è una lentezza molto visibile, ma non abbastanza per giustificare la disattivazione dello swap tutti insieme e molto difficile da prevenire in qualsiasi sistema operativo. Disattiva lo scambio e questa lentezza iniziale dopo la scansione di backup / virus potrebbe non verificarsi, ma il sistema potrebbe funzionare un po 'più lentamente per tutto il giorno. Anche questa non è una situazione limitata a Linux.
Quando si sceglie ciò che deve essere scambiato su disco, il sistema tenta di selezionare la memoria che non viene effettivamente utilizzata, da leggere o da cui scrivere. Ha un algoritmo piuttosto semplice per calcolare questo che sceglie bene la maggior parte delle volte.
Se hai un sistema in cui hai una grande quantità di RAM (al momento della stesura, 8 GB è una quantità enorme per una tipica distribuzione Linux), molto raramente ti imbatterai in una situazione in cui è necessario lo swap. Puoi anche provare a disattivare lo swap. Non consiglio mai di farlo, ma solo perché non sai mai quando più RAM potrebbe salvarti da un crash dell'applicazione. Ma se sai che non ne avrai bisogno, puoi farlo.
Ma come può lo swap accelerare il mio sistema? Lo scambio non rallenta le cose?
L'atto di trasferire i dati dalla RAM allo swap è un'operazione lenta, ma viene presa solo quando il kernel è abbastanza sicuro che il vantaggio complessivo supererà questo. Ad esempio, se la memoria della tua applicazione è salita al punto da non avere quasi più cache e il tuo I / O è molto inefficiente per questo motivo, puoi effettivamente ottenere molta più velocità dal tuo sistema liberando un po 'di memoria, anche dopo la spesa iniziale di scambio di dati per liberarli.
È anche l'ultima risorsa se le tue applicazioni richiedono effettivamente più memoria di quella che hai in realtà. In questo caso, lo scambio è necessario per prevenire una situazione di memoria insufficiente che spesso provoca l'arresto anomalo di un'applicazione o la morte forzata.
Lo scambio è associato solo a momenti in cui il sistema funziona in modo scadente perché si verifica in momenti in cui si sta esaurendo la RAM utilizzabile, il che rallenterebbe il sistema (o lo renderebbe instabile) anche se non si fosse effettuato lo scambio. Quindi, per semplificare le cose, lo scambio avviene perché il tuo sistema si sta impantanando, piuttosto che il contrario.
Una volta scambiati i dati, quando vengono di nuovo pubblicati?
Il trasferimento dei dati al di fuori dello scambio (almeno per i dischi rigidi tradizionali) richiede tanto tempo quanto il loro inserimento. Quindi comprensibilmente, il tuo kernel sarà altrettanto riluttante a rimuovere i dati dallo swap, specialmente se non viene effettivamente utilizzato (cioè letto o scritto). Se hai dati in swap e non vengono utilizzati, in realtà è una buona cosa che rimanga in swap, poiché lascia più memoria per altre cose che vengono utilizzate, potenzialmente velocizzando il tuo sistema.
free -m
,top -b 1