Utilizzo della memoria in linux, la variabile "swappiness"

Lun, 26/05/2008 - 14:13

Utilizzo della memoria in linux, la variabile "swappiness"

Inviato da specialworld83 4 commenti

Questa piccola guida vuole provare a spiegare come il Kernel Linux gestisce la Memoria. In particolare però verrà messo in risalto come il particolare utilizzo della Ram possa ridurre le prestazioni del sistema. Vedremo quindi come poter ovviare a questo problema.

TUTTI i processori a 32 bit leggono SEMPRE esattamente 4 GIGA di ram, ovvero 2^32 bit. Anche se in realtà di ram fisica, solitamente se ne possiede molta di meno!

TUTTI i processori a 64 bit invece leggono SEMPRE esattamente 16 EXA di ram! (è la verità!), ovvero 2^64 bit

le persone che dicono di avere server 32 bit con + di 4 giga dicono una fesseria, in realtà a quei processori vengono aggiunti 4 bit, si passa quindi da 32 a 36 bit per un totale di 2^36 bit = 64 GIGA di ram

Continuiamo la trattazione sui processori 32 bit ma il discorso si può ovviamente allargare ai 36 e 64 bit.

------------------------------------------

I computer a un 32 bit leggono SEMPRE e ripeto SEMPRE 4 GIGA di ram, tutti i programmi sono creati per lavorare con 4 GIGA di ram (nei 64, anche se è possibile, nessuno usa 16 EXA, sono troppi).

Questo dovrebbe far intuire come mentre un computer lavora si venga a creare un collo di bottiglia quando i dati passano per la tua ram fisica!

Ma come gestisce questa memoria il kernel linux?

Nella ram fisica la spazio è "diviso" tra "due tipi di memoria"

* il primo tipo è quella occupata dai programmi in esecuzione (e NON si tocca)

* la seconda è quella usata dalla cache del disco ovvero uno cache che serve a velocizzare l'accesso in scrittura/lettura al filesystem (e qui entra in gioco la swappiness)

Quando la ram fisica risulta totalmente occupata si passano le informazioni meno referenziate (con bassa priorità) dalla ram alla swap, scrivere nella swap però è un'operazione molto lenta, circa 10 volte più lenta rispetto alla ram!

il kernel (a partire dalla 2.6) linux gestisce la tendenza di scrivere sulla swap secondo un algoritmo:

tendenza a swappare = mapped_ratio/2 + distress + vm_swappiness

le prime due sono "inviolabili" (e non mi dilungo su cosa siano perchè onestamente non ricordo!) ma la variabile di swappines no!, essa ci permette di ridurre la cache del disco, permettendoci di liberare ram e quindi non swappare!

di default la swappiness è settata a 60:

Quote:

[gemelli@specialworld83 ~]$ cat /proc/sys/vm/swappiness
60

Ma noi la possiamo modificare tra 0 e 100. + è alto il valore + sarà la tendenza a swappare!

Modifichiamo quindi questo valore se notiamo particolari rallentamenti:

modifica temporanea

settiamo la swappines ad esempio a 30! da root digitiamo:

Quote:

sysctl -w vm.swappiness=30

Vediamo come lavora il nostro pc, se tutto è ok possiamo rendere permanente la nostra modifica, altrimenti possimo provare a "giocare" e trovare il giusto settaggio.

modifica permanente

Aprimo con un qualisiasi editor di testo, da root, il file:

/etc/sysctl.conf

e aggungiamo questa riga in alto:

Quote:

vm.swappiness = 30

spero di essere stato utile!.. BUONO STUDIO!

Si ringrazia anubis, poichè la guida essendo per suse, sono riuscito lo stesso a far ciò con mandriva, avendo effetti positivi.





Commenti

Ritratto di anubis
#1

Inviato da anubis il Mar, 27/05/2008 - 09:22.

swappiness

mi piace che la guida sia utile anche qui, per la cronaca..

link alla originale: http://www.suseitalia.org/modules/wfsection/article.php?articleid=147&com_id=5531&com_rootid=5526

in più la guida è "universale" in quanto è linux a comportarsi così e non una distro specifica...

e per far vedere una schermata di kinfocenter dove si vede quanta ram è occupata dalla cache..vedete qui:

http://img246.imageshack.us/my.php?image=cachece0.png

visto quanta cache occupata non ostante i 4 giga di ram? ben 3 sono di cache.

ovviamente a me non interessa toccare la variabile di swappiness

---edit---

hai dimenticato una cosa importante...

Quote:

Prima di rendere permanente le modifiche consiglio vivamente di vedere come si comporta il nostro pc! Grazie ad alcuni tools come kinfoceter o da shell usando il comando:

free

Monitorizziamo per un pò la situazione quando si aprono alcuni programmi, Se si swappa molto e la cache NON scende sotto il 30-40% allora, iniziamo a settare un bel 30! per scendere magari a 10!

importante
queste informazioni non sono applicabili in assoluto!

se il programma che usiamo ha bisogno di "scrivere" sul filesystem molto spesso, riducendo la cache il programma rallenta, questo per fare un esempio!

spero di essere stato utile!.. BUONO STUDIO!



Ritratto di DonGennaro
#2

Inviato da DonGennaro il Sab, 07/06/2008 - 17:49.

Re: swappiness

Non capisco come fai a vedere tramite il comando free se si swappa molto o poco!
Spiegazioni?
Grazie!

Ricorda per sempre il cinque novembre.
E la congiura contro lo stato.
Ricorda e sta attento che quel tradimento...
MAI E POI MAI SIA DIMENTICATO.



Ritratto di Moreno
#3

Inviato da Moreno il Sab, 07/06/2008 - 17:56.

Re: swappiness

Ciao

se volete sapere tutto sulla vostra memoria

<br />$ cat /proc/meminfo<br /><br />MemTotal:       774840 kB<br />MemFree:        514816 kB<br />Buffers:         36176 kB<br />Cached:         138172 kB<br />SwapCached:          0 kB<br />Active:          83768 kB<br />Inactive:       136952 kB<br />HighTotal:           0 kB<br />HighFree:            0 kB<br />LowTotal:       774840 kB<br />LowFree:        514816 kB<br />SwapTotal:     2096440 kB<br />SwapFree:      2096440 kB<br />Dirty:              28 kB<br />Writeback:           0 kB<br />AnonPages:       46372 kB<br />Mapped:          16116 kB<br />Slab:            27772 kB<br />SReclaimable:    20472 kB<br />SUnreclaim:       7300 kB<br />PageTables:        964 kB<br />NFS_Unstable:        0 kB<br />Bounce:              0 kB<br />WritebackTmp:        0 kB<br />CommitLimit:   2483860 kB<br />Committed_AS:    71560 kB<br />VmallocTotal:   245752 kB<br />VmallocUsed:     10248 kB<br />VmallocChunk:   235364 kB<br />HugePages_Total:     0<br />HugePages_Free:      0<br />HugePages_Rsvd:      0<br />HugePages_Surp:      0<br />Hugepagesize:     4096 kB<br />

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di anubis
#4

Inviato da anubis il Dom, 08/06/2008 - 11:58.

Re: swappiness

Quote:

Non capisco come fai a vedere tramite il comando free se si swappa molto o poco!
Spiegazioni?
Grazie!

certo..però provare a digitare il comando no è?

anubis@HP-Linux:~&gt; free<br />             total       used       free     shared    buffers     cached<br />Mem:       4147480    1723012    2424468          0      61340    1150256<br />-/+ buffers/cache:     511416    3636064<br />Swap:      1188768          0    1188768<br />

come è facile vedere io ho 1 giga circa di swap totale (total), di cui zero occupata(used) e quindi tutta libera(free)