Utilizzo della memoria in linux, la variabile "swappiness"

Dom, 25/11/2007 - 14:45

Utilizzo della memoria in linux, la variabile "swappiness"

Inviato da anubis 20 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! :-o :-o (è 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! (come questo: )

|-------------| 512 MB (ad esempio) |--------------|
| |____________________| |
| 4GB ____________________ 4GB |
| | | |
| | | |
|-------------| |--------------|

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:

anubis@linux-pc:~> 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:

sysctl -w vm.swappiness=30

si otterrà questa risposta:

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 modifichiamo oppure aggungiamo se non c'è questa riga:

vm.swappiness = 60

sostituendo ovviamente, a 60 il valore che ti interessa!.

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

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!

inoltre per concludere una chicca a favore di linux!

per chi non lo sapesse su linux la swap è una partizione! su windows è un FILE, questo è uno dei motivi che portano anche ad una maggiore frammentazione!! (per loro ovviamente!) 8-) 8-)

spero di essere stato utile!.. BUONO STUDIO!





Commenti

Ritratto di anubis
#1

Inviato da anubis il Dom, 25/11/2007 - 15:41.

disegno memoria

il disegnino non ne vuole sapere di uscire...uff.. Sad

OpenSUSE Member,Packman Packager, Education Project Admin, LXDE Project Admin
Powered by http://en.opensuse.org/HP_Pavilion_dv6855el



Ritratto di SWZone
#2

Inviato da SWZone il Lun, 26/11/2007 - 21:25.

Re: disegno memoria

Ho un serverino con 512 mb di ram e opensuse 10.3, posso mettere lo swapness più basso di 60? Vorrei far lavorare il meno possibile l'hardisk. Se si che valore potrei dare?



Ritratto di anubis
#3

Inviato da anubis il Mar, 27/11/2007 - 20:57.

Re: disegno memoria

certo che la puoi mettere ad un valore ineriore, anzi l'obbiettivo di questa guida è metterti nella condizione di farlo! A priori non posso però dirti che valore mettere. usa i tool proposti come Kinfocenter

OpenSUSE Member,Packman Packager, Education Project Admin, LXDE Project Admin
Powered by http://en.opensuse.org/HP_Pavilion_dv6855el



Ritratto di nefertario
#4

Inviato da nefertario il Sab, 01/12/2007 - 00:58.

Re: disegno memoria

ciao, ho provato ma non mi fa salvare il file una volta che ho aggiunto la stringa. mi dice di controllare se ho il diritto di farlo o una cosa del genere Laughing



Ritratto di anubis
#5

Inviato da anubis il Sab, 01/12/2007 - 01:34.

Re: disegno memoria

fallo da root! ^^

OpenSUSE Member,Packman Packager, Education Project Admin, LXDE Project Admin
Powered by http://en.opensuse.org/HP_Pavilion_dv6855el



Ritratto di wal7er
#6

Inviato da wal7er il Sab, 15/12/2007 - 14:40.

RE

Quote:

per chi non lo sapesse su linux la swap è una partizione! su windows è un FILE, questo è uno dei motivi che portano anche ad una maggiore frammentazione!! (per loro ovviamente!)

spero di essere stato utile!.. BUONO STUDIO!

Ad essere piu' percisi non e' solo per questo ma anche (e soprattutto) per gli algoritmi usati per la paginazione (algortitmi usati su UNIX e studiati/introdotti negli anni 1970).

HP Pavilion dv5-1110el powered by OpenSUSE 13.2 64bit

http://linuxcounter.net/cert/432576.png



Ritratto di anubis
#7

Inviato da anubis il Sab, 22/12/2007 - 12:48.

Re: RE

per una discussione + approfondita..

http://video.google.it/videoplay?docid=5049463766682138223

OpenSUSE Member,Packman Packager, Education Project Admin, LXDE Project Admin
Powered by http://en.opensuse.org/HP_Pavilion_dv6855el



Ritratto di dedalus
#8

Inviato da dedalus il Sab, 29/12/2007 - 04:06.

Re: RE

quando dici:

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!

cosa intendi esattamente:

1) devo stare attento che la cache NON scenda sotto il 20-40% in generale? (credo di no)

2) Oppure devo stare attento che la cache NON scenda sotto il 20-40% SOLO SE il sistema sta swappando molto? E' questo che intendevi, giusto?

Grazie!



Ritratto di anubis
#9

Inviato da anubis il Sab, 29/12/2007 - 10:54.

Re: RE

con

Quote:

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!

intendevo,

se la swapp è molto occupata e la cache non scende sotto il 40% (della ram totale) allora stiamo "sprecando" ram (su un giga sprechi quasi 400 mb) con la cache (tutto dipende dalle proprie esigenze..come detto sopra)

per evitare questo spreco settiamo il valore per diminuire la cache ecc ecc

OpenSUSE Member,Packman Packager, Education Project Admin, LXDE Project Admin
Powered by http://en.opensuse.org/HP_Pavilion_dv6855el



Ritratto di dedalus
#10

Inviato da dedalus il Sab, 29/12/2007 - 19:38.

Re: RE

chiarissimo, grazie!