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 Lun, 26/05/2008 - 11:55.

utilizzo della ram in linux

vedete qua:

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

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



Ritratto di specialworld83
#2

Inviato da specialworld83 il Lun, 26/05/2008 - 14:26.

utilizzo della ram in linux

Provata la guida anche su mandriva, ed ha funzionato perfettamente, anubis mi son permesso di prendere la guida è postarla anche su mandrivaitalia, cmq se leggi c'è il ringraziamento fatto a te.




Ritratto di anubis
#3

Inviato da anubis il Lun, 26/05/2008 - 14:31.

Re: utilizzo della ram in linux

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

ad ogni modo..sono su mandrakeitalia ma non vedo la guida.. mi sa che ancora non l'hanno pubblicata...

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



Ritratto di specialworld83
#4

Inviato da specialworld83 il Lun, 26/05/2008 - 14:37.

Re: utilizzo della ram in linux

Ancora la devono approvare, cmq alcune cose non le ho messe, essendo che la guida funziona al 100%, anzi le applicazioni girano meglio e swappano perfettamente adesso.




Ritratto di anubis
#5

Inviato da anubis il Lun, 26/05/2008 - 14:47.

Re: utilizzo della ram in linux

Quote:

Ancora la devono approvare, cmq alcune cose non le ho messe, essendo che la guida funziona al 100%, anzi le applicazioni girano meglio e swappano perfettamente adesso.

veramente non dovrebbero swappare :-o

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



Ritratto di specialworld83
#6

Inviato da specialworld83 il Lun, 26/05/2008 - 14:49.

Re: utilizzo della ram in linux

veramente swappa anubis, è strano ma lo fa.Bo, cmq sembra che abbia alleggerito il carico della memoria cache della ram.Poi mandriva è un pò strana in certe cose, nei prossimi giorni vedro cosa succede.




Ritratto di anubis
#7

Inviato da anubis il Lun, 26/05/2008 - 15:04.

Re: utilizzo della ram in linux

non so quanta ram hai, ma modificando la swappiness alla fine devi ottenere una tendenza minore ad occupare lo spazio di swap perchè lo spazio dedicato la cache si riduce

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



Ritratto di filotux
#8

Inviato da filotux il Mar, 27/05/2008 - 11:11.

Re: utilizzo della ram in linux

La guida e' molto interessante ma secondo me ci sono alcune piccole imprecisioni che non cambiano, comunque, la sostanza e la validita' della guida.

La faccenda 32 vs 64 bit oltre che dall'architettura della CPU dipende anche dal sistema operativo installato: un processore a 64 bit con un kernel a 32 usera' anch'esso 32 bit a mano di non attivare la modalita' PAE dove vengono utilizzati 4 bit accessori per indicizzare fino a 64 GB.

La terminologia usata in questa guida, "i processori a 32 bit leggono SEMPRE esattamente 4 GIGA di ram", non e' molto appropriata in quanto occorre distinguere tra la memoria che e' possibile indicizzare e quella disponibile ai processi. E' vero che con la modalita' PAE vengono visti 64 GB totali, ma ogni processo continua ad avere uno spazio di indirizzamento di 4 GB.

Per quanto riguarda le pagine candidate allo swap, l'eta' della pagina e' solo uno dei fattori che vengono presi in considerazione; ce ne sono tanti altri che riguardano il tipo di dati memorizzati, la presenza di lock, la presenza di segmenti di memoria condivisa, senza contare il fatto che alcuni processi non possono essere "swappati". Non tutte le pagine vecchie, poi, vengono scritte sulla swap. Ad esempio il codice dei programmi viene semplicemente scartato in quanto e' possibile rileggerselo direttamente dall'eseguibile presente sul disco.

Non e' vero che su Linux la swap e' una partizione e su Windows un file: non conosco quest'ultimo OS ma su Linux si puo' scegliere tra avere swap su una o piu' partizioni o su uno o piu' file, la scelta spetta all'utente in base alle necessita'. Si puo', ad esempio, abilitare un file di swap temporaneamente quando si necessita di piu' memoria. Ovviamente di solito si usa una partizione per motivi di performance.

Una domanda: cos'e' un "EXA"?

filotux

Debian Lenny on BeagleBoard



Ritratto di anubis
#9

Inviato da anubis il Mar, 27/05/2008 - 12:53.

Re: utilizzo della ram in linux

grazie per le precisazioni.

http://it.wikipedia.org/wiki/Exabyte

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



Ritratto di filotux
#10

Inviato da filotux il Mar, 27/05/2008 - 13:39.

Re: utilizzo della ram in linux

e grazie per l'exa: le mie conoscenze si fermavano al peta... Wink

Debian Lenny on BeagleBoard