# [OT-Poll] Dispendio memoria su sistemi linux

## AlterX

Ciao ragazzi...

è da molto tempo che uso linux e da sempre noto un consumo di memoria "esasperato" del pinguino.

L'ho notato su molti sistemi linux, eccetto debian e anche gentoo (anche se meno della prima), attribuendo 

questo anche all'ambiente grafico...

però, adesso, che uso anche dei server gentoo privi di ogni grafica  :Laughing: , noto che tempo uno o due giorni e

la memoria disponibile, secondo /proc/meminfo, si riduce di circa il 98-9%!!!

E' vero che il sistema serve da posta, con database, autenticazioni ecc..., però mi sembra strano che dopo

un giorno di attività si ha un calo così alto di memoria!!!

Attualmente sul portatile, anche se ho 1Gb di RAM, con kde 3.3.2 ottengo, diciamo appena attivato il sistema,

una occupazione di circa 280-380MB (non ricordo benissimo  :Laughing: ) che comunque è molto alta...

Voi che ne pensate per quanto riguarda il server??

E il vostro sistema quanto occupa a "freddo"??

Ciao

----------

## hardskinone

Il mio sistema appena avviato, con X, fluxbox, un utente, nessun server particolare attivo (httpd, ssh o simili), aterm, 7 torsmo occupa circa 60 mega.

Letture consigliate  :Cool:  https://forums.gentoo.org/viewtopic-t-175419-highlight-memory+ram+kernel.html

----------

## xchris

ottima lettura...

```

             total       used       free     shared    buffers     cached

Mem:          2025       1962         63          0        454        694

-/+ buffers/cache:        812       1212

Swap:         3914          0       3914

```

tieni conto che ci gira il mondo su questa macchina....apache,php,mysql,squid,dansguardia,postfix,cyrus,amavisd ecc ecc ecc

----------

## n3m0

Non capisco dove sia il problema. Il sistema operativo ha il compito di massimizzare l'utilizzo della RAM. Lo swap è una soluzione estrema perchè coinvolge dispositivi di memorizzazione a tempi di accesso superiori di un paio d'ordini di grandezza.

Quindi, più dati e testo per processo si può mantenere in RAM e meglio è. La RAM ci sta e va utilizzata, quanto più possibile.

E anche quando in RAM sono presenti pagine che non vengono usate, queste vengono lasciate lì a meno che la RAM libera non diventi insufficiente.

Le operazione di swap in/out vengono svolte solo quando necessario, poichè sono operazioni costose.

Lo swap-out viene effettuato: 

- dal kernel thread kswapd, se trova che il numero di pagine libere per zona (in x86_32bit Linux divide la memoria in 3 Zone) è sotto la soglia pagemin o pagelow

- dal sistema di allocazione memoria per processi, se durante un allocazione si rende conto che questa porterebbe il sistema sotto le soglie di pagine libere consentite.

Questa per farla breve  :Wink: 

----------

## xchris

infatti...

sarebbe un grande spreco avere memoria libera in tutti i sensi...

che la usi sta memoria  :Very Happy: 

----------

## gutter

Io non capisco dove sia il problema; è il sistema operativo che ha il compito di allocare la memoria quindi ne saprà più di non su quello che è meglio per il sistema.

Come ho detto la migliore soluzione è non pensarci  :Wink: 

----------

## AlterX

 *xchris wrote:*   

> infatti...
> 
> sarebbe un grande spreco avere memoria libera in tutti i sensi...
> 
> che la usi sta memoria 

 

ahh per me va benissimo che la usi!!  :Laughing: 

E' solo che se tutta quella memoria venisse realmente 

utilizzata (come nel caso mio del 99%), 

come ci insegna il caro vecchio zio bill su sistemi win,

il sistema si dovrebbe inballare!!  :Laughing:   :Laughing: 

Fortunatamente oltre a quanto scritto in questo post, ho notato anche

che comunque le prestazioni del sistema non peggiorano; quindi questo 

fa pensare che in realtà la memoria non è occupata "inutilmente", ma

a favore delle applicazioni principali in corso (posta ecc...)

Era giusto per capire il funzionamento di linux vs win, e il link

suggerito è una ottima soluzione!  :Wink: 

----------

## xoen

#define IMHO

Il problema è che se ad esempio io uso l'80% di RAM ed ho 0.75 GB di RAM...allora uno che ha meno RAM è costretto ad usare lo SWAP, e questo rallenta molto.

In più se si usa molta RAM, potrebbe anche essere che c'è qualche programma che lascia buchi in memoria (i famigerati memory leak) perchè alloca memoria ma non la rilascia quando non gli serve più...e questo non è bene.

PS: Vedi manuali di malloc() e free().

----------

## n3m0

 *xoen wrote:*   

> Il problema è che se ad esempio io uso l'80% di RAM ed ho 0.75 GB di RAM...allora uno che ha meno RAM è costretto ad usare lo SWAP, e questo rallenta molto.

 

Il sole è caldo.

Cioè quello che voglio dire è che è ovvio che se tu con 700MB di RAM riesci a tenere in memoria per intero i processi di 50 servizi, un X server e un DM come Gnome, io con 256MB non ci riuscirò mai. E' per questo che avere più memoria RAM ti permette di avere un sistema più performante.  :Wink: 

 *xoen wrote:*   

> In più se si usa molta RAM, potrebbe anche essere che c'è qualche programma che lascia buchi in memoria (i famigerati memory leak) perchè alloca memoria ma non la rilascia quando non gli serve più...e questo non è bene.

 

Quello non è un problema del sistema operativo. Se uno non sa programmare, è colpa solo di se stesso.

----------

## AlterX

 *xoen wrote:*   

> #define IMHO
> 
> Il problema è che se ad esempio io uso l'80% di RAM ed ho 0.75 GB di RAM...allora uno che ha meno RAM è costretto ad usare lo SWAP, e questo rallenta molto.
> 
> In più se si usa molta RAM, potrebbe anche essere che c'è qualche programma che lascia buchi in memoria (i famigerati memory leak) perchè alloca memoria ma non la rilascia quando non gli serve più...e questo non è bene.
> ...

 

Okkey...però ho notato che linux mantiene una sorta di "relazione" tra la RAM da occupare e quella totale. 

Mi spiego: 

--> sul mio portatile, 1GB di RAM, "solo" 380MB

--> su un sistema con 128MB, 70-80MB.

Quindi linux prende confidenza quando può e si intimidisce quando non può!  :Laughing: 

E' questo proporzionalità che mi ha lasciato perplesso... :Crying or Very sad: 

Significa che quindi su sistemi con maggior memoria, quest'ultima venga in qualche modo "sprecata" per il bene del sistema!

----------

## n3m0

 *AlterX wrote:*   

> Significa che quindi su sistemi con maggior memoria, quest'ultima venga in qualche modo "sprecata" per il bene del sistema!

 

Se è per il bene del sistema non è sprecata.  :Wink: 

----------

## AlterX

 *n3m0 wrote:*   

>  *AlterX wrote:*   Significa che quindi su sistemi con maggior memoria, quest'ultima venga in qualche modo "sprecata" per il bene del sistema! 
> 
> Se è per il bene del sistema non è sprecata. 

 

eheheheheh  :Laughing: 

Però si sa che su sistemi win, un aumento di memoria occupata non ha lo stesso effetto

che ha su linux...ANZI!!!  :Laughing: 

----------

## xoen

 *AlterX wrote:*   

> 
> 
> Okkey...però ho notato che linux mantiene una sorta di "relazione" tra la RAM da occupare e quella totale.
> 
> 

 

Quindi se io ho 128 MB di RAM ne userà di meno perchè sa che ce ne di meno? Se così fosse (ed a quanto ho capito è così) è grandioso, mica uno compra tanta RAM per non usarla, se la usa per ottimizzare l'accesso ad alcune "cose" ben venga!

Il problema si pone se usa 600 MB di RAM sul mio computer con 0.75 GB di RAM e vuole 600 MB anche su un computer con 128 MB di RAM, li, scusate il francesismo, sono cazzi...

----------

## =DvD=

LInux usa la ram che, per esempio, un *bsd lascerebbe libera, per fare cache dei files piu usati sull'hd e altra robetta.

E' per questo che un sistema linux ha di solito la ram molto più occupata (ma quindi usata, e se ce l'abbiamo perchè non usarla) di un altro unix.

Finestre non lo consideriamo nemmeno per favore =D

----------

## shev

Gli *nix in genere (non è una prerogativa di linux) usano al meglio (o almeno ci provano) la RAM che hanno a disposizione, addattandosi il più possibile alla situazione. Semplificando il più possibile, se di RAM ce n'è in abbondanza, vengono lasciati in memoria anche processi non strettamente indispensabili o non attivamente utilizzati. Se di RAM ce n'è poca, si fa selezione e si mantiene in memoria l'indispensabile e ciò che viene al momento usato. Questo non vuol dire che se su un sistema con 1 GB di RAM ne vengono usati 700 MB, su un sistema con 256 MB ci saranno 446 MB di swap nelle stesse condizioni. Di quei 700 MB molti potrebbero avanzare, non essere indispensabili, solo che essendoci RAM in abbondanza è inutile caricare e scaricare pagine in continuazione, pagine che potrebbero tornare utili a breve. Se di spazio ce n'è, usiamolo, perchè lasciarlo libero?

My 2 cents

----------

## xoen

 *shev wrote:*   

> Gli *nix in genere (non è una prerogativa di linux) usano al meglio (o almeno ci provano) la RAM che hanno a disposizione, addattandosi il più possibile alla situazione.
> 
> 

 

C'entra niente un certo Arcangeli  :Wink:  ?

 *shev wrote:*   

> 
> 
> Semplificando il più possibile, se di RAM ce n'è in abbondanza, vengono lasciati in memoria anche processi non strettamente indispensabili o non attivamente utilizzati. Se di RAM ce n'è poca, si fa selezione e si mantiene in memoria l'indispensabile e ciò che viene al momento usato. Questo non vuol dire che se su un sistema con 1 GB di RAM ne vengono usati 700 MB, su un sistema con 256 MB ci saranno 446 MB di swap nelle stesse condizioni. Di quei 700 MB molti potrebbero avanzare, non essere indispensabili, solo che essendoci RAM in abbondanza è inutile caricare e scaricare pagine in continuazione, pagine che potrebbero tornare utili a breve. Se di spazio ce n'è, usiamolo, perchè lasciarlo libero?
> 
> 

 

Era quello che volevo sentire, quoto sul fatto che se ho tanta RAM ed il sistema la può usare per migliorare le prestazioni (visto che l'accesso alla memoria RAM è molto veloce) ben venga!

Domanda: Se volessi sapere quanta memoria RAM è usata per ottimizzare come faccio? Ad intuito, quel buffers e cached in top servono allo scopo? E la percentuale nella cache visualizzata dall'applet di GNOME "Monitor di sistema"?

----------

## federico

E' normale che il sistema utilizzi quanta piu' ram disponibile, e' previsto che sia cosi'.

Contrariamente ad altri presunti sistemi operativi che si permettono di sprecare le risorse del sistema, linux le ottimizza e alloca quanta piu memoria riesce per le operazioni che puo' o che potrebbe fare.

Questa e' comunque una FAQ.

Fede

----------

## AlterX

Bene bene  :Laughing: 

Ora mi sento soddisfatto  :Wink: 

era tutto quello che volevo sentirmi dire. :Rolling Eyes: 

----------

## cloc3

[splittable on Gentoo causa dipendenza? ]

Ahi, ahi. Mi ero ripromesso una settimana di silenzio, prima che i mod stabiliscano di dichiarare ot il mio nick.  :Shocked: 

[/splittable on Gentoo causa dipendenza? ]

Posto perché, nel mio caso, ho individuato un colpevole:

è certamente colpa di kswapd0. 

Succede solo in una delle mia installazioni. amd64. Rigorosamente instabile. - Bé? Non ridete. Ma in questo forum è proprio vietato divertirsi? -  :Laughing: 

E poi, quando ero un nubbio principiante le mie tildeottosei erano molto più indulgenti...  :Rolling Eyes: 

Comunque, kswapd0 prende il controllo del sistema - non consuma apparentemente molta cpu - ma lo inchioda. Le applicazioni non partono, mouse e tastiera rispondono con ritardi intollerabili. E' stata una faticaccia farci delle indagini.  Un pkill -9 kswapd0 e tutto riparte. Tra l'altro: kernel gentoo-dev-sources-2.6.10-r7  e 2.6.11-r3.

Cosa si metta a fare kswapd0 non lo capisco proprio. Per di più, non ho predisposto volutamente neppure un bit di swap sul disco rigido, confidando ciecamente nei 1000 MB della mia PC2700. Ma evidentemente, il kernel non se accorge, o si rabbuia per questo.

E' molto sbagliato configurare un sistema senza swap? Perché fino ad ora mi era andato tutto liscio? Esiste qualcosa nei nuovi kernel che va sistemato diversamente da prima? Può esserci un baco da segnalare?

Vi vengono altre domande da fare?

----------

## cloc3

Ho osservato ancora un fenomeno interessante, almeno per me che non ho precise conoscenze tecniche:

La quantità di memoria ram presente sul mio portatile è rilevata da /proc/meminfo con due valori leggermente diversi per l'installazione a 64 bit e per quella a 32 bit. Nel primo caso ho:

```

gentoo-amd ~ # cat /proc/meminfo |grep MemTotal

MemTotal:      1025896 kB

```

nel secondo:

```

gentoo-amd ~ # cat /proc/meminfo |grep MemTotal

MemTotal:      906352 kB

```

Da cosa dipende questo fatto?

----------

## xchris

```

grep CONFIG_HIGHMEM /usr/src/linux/.config

```

hai messo il supporto? (metti 4 GB)

ciao

----------

## SilverXXX

@ cloc3: hai abilitato il supporto a più memoria nel kernel?

Cmq, se proprio ci tenete, ci sono alcuni valori da cambiare in sysctl.conf per controllare certi aspetti sull'uso della memoria. Cmq tutti i programmi che servono a controllare l'utilizo della memoria dovrebbero indicare che parte è cache e che parte non lo è.

----------

## n3m0

 *cloc3 wrote:*   

> Da cosa dipende questo fatto?

 

Dal fatto che con uno spazio indirizzi lineare a 32bit il kernel Linux indirizza direttamente solo 896MB di RAM (gli altri 128 MB vengono utilizzati per mapping non diretto della memoria > 896MB, solo quando è abilitato ovviamente il supporto nel kernel).

A 64 bit lo spazio indirizzi lineare è sufficientemente grande da non avere di questi problemi.

Maggiori dettagli: Understanding the Linux Kernel - Bovet, Cesati  :Wink: 

Quindi come ti dicevano, a 32bit assicurati di aver abilitato il supporto per la memoria > 896MB (4GB Support)

----------

## cloc3

 *n3m0 wrote:*   

> 
> 
> Dal fatto che con uno spazio indirizzi lineare a 32bit bla bal bla...

 

Grazie per la spiegazione (e anche agli altri).

Immagino che non mi convenga abilitare il supporto all'high memory (come cavolo si dice in italiano?) a 32 per pochi bit (casomai dovrei usarlo per arrivare a 2 giga).

Non ho capito bene, invece, se i miei problemi a 64 bit siano correlati al mancato supporto. Ma credo di no, vero? Se ho imparato la lezione, i 64 arrivano fino a 896MB al quadrato. O sbaglio?

edit:

[quote="Help di menuconfig spiega:[/quote]

Il supporto per l'high memory a 64 bit parte da 2TB[/quote]

E perché ti vendono le schede madri con un massimo di due slot da un giga?  :Smile: 

----------

## n3m0

 *cloc3 wrote:*   

> Immagino che non mi convenga abilitare il supporto all'high memory (come cavolo si dice in italiano?)  a 32 per pochi bit (casomai dovrei usarlo per arrivare a 2 giga).

 

in ITA: Memoria estesa  :Very Happy: 

Cmq perchè non ti conviene? Se ho capito bene, hai un GB di memoria, non lo vuoi usare tutto?

Per un solo GB è disponibile la patch di Con Kolivas che permette di usare tutto il GB di memoria fisica con mapping lineare (che risulta più efficiente della gestione dei rimanenti 128MB in modo non lineare), pero' ti inibisce l'utilizzo di memoria > 1GB (praticamente se hai più di un GB devi attivare per forza il supporto alla memoria estesa, mentre con un GB solo puoi usare la patch di Kolivas).

 *cloc3 wrote:*   

> Non ho capito bene, invece, se i miei problemi a 64 bit siano correlati al mancato supporto. Ma credo di no, vero? Se ho imparato la lezione, i 64 arrivano fino a 896MB al quadrato. O sbaglio?

 

Beh per farti capire bene dovrei spiegarti un casino di cose.

Vediamo se riesco a sintetizzare. Innanzitutto con 32 bit in teoria tu puoi indirizzare 4GB di RAM (2^32), ma dalla teoria alla pratica, ci passa il kernel, che per motivi che non ti sto a spiegare, non può fare un mapping lineare tra spazio lineare (a 32bit) e spazio fisico (a 32bit) di memoria di tutti e 4GB, ma lo fa solo per i primi 896MB e poi con altre tecniche mappa la memoria fisica restante utilizzando gli altri 128MB di spazio lineare.

Ora. Questo problema si presenta solo con architetture a 32 bit.

Con architetture a 64 bit, come per esempio anche dagli HP Alpha, dei 64bit disponibili per indirizzare memoria fisica, ne vengono usati di meno (ad esempio 53 per gli alpha) mentre lo spazio lineare resta cmq a 64 bit.

Il che ti porta ad avere un spazio fisico massimo di 2^53 contro uno spazio lineare di 2^64. A questo punto sparisce il problema della zona a memoria estesa (ZONE_HIGHMEM) perchè hai uno spazio lineare sufficientemente maggiore di uno fisico, tanto da permettere di non usare "trucchetti" (la ZONE_HIGHMEM) per il mapping di "tanta memoria". (almeno per gli  alpha, probabilmente, per altre la ZONE_HIGHMEM potrebbe soltanto spostarsi)

Purtroppo a volerti spiegare tutto, scriverei un libro  :Very Happy: 

PS: per spazio lineare si intende lo spazio di indirizzi virtuale utilizzato dai processi, partizionato in pagine.

PPS: notare che nelle moderne arch a 32bit di intel, il bus indirizzi è a 36bit, che implica una memoria fisica massima di 64GB.

----------

## n3m0

Aggiungo, che, cmq, in ogni caso, è buona cosa configurare il sistema con una partizione di swap, anche se ti sembra inutile.

Il perchè kswapd si comporta in quel modo senza una partizione di swap, non saprei.

Non ho mai configurato un sistema senza swap nè tantomeno ho mai messo mano su un arch a 64bit.

Prova a fare una partizione di swap ed attivarla e vedi che succede.

----------

## cloc3

 *n3m0 wrote:*   

> 
> 
> Beh per farti capire bene dovrei spiegarti un casino di cose.
> 
> 

 

Grazie, mi hai detto cose affascinanti.

Per quanto riguarda il consiglio sulla swap, non posso metterlo in pratica subito. Tuttavia sospetto che ci sia un problema più banale, legato all'installazione instabile, cioè a errori miei.

... Il consiglio sulla bibliografia sarà applicato senz'altro  :Smile:  .

----------

## cloc3

Carino.

----------

## cloc3

 *n3m0 wrote:*   

> 
> 
> Per un solo GB è disponibile la patch di Con Kolivas

 

Ho provato. Sono emerse cose che probabilmente andrebbero messe in post separato. Ma per ora continuo qui, perché non le ho ancora inquadrate bene.

Prima ho installato direttamente le ck-sources, ma quel kernel non riesce a far partire il framebuffer, perciò si avvia, lasciandoti la schermata iniziale sotto il naso e obbligandoti al ctrl-alt-canc.

Allora ho dovuto imparare a patchare da me i gentoo-sources.

Funziona, però ho problemi con gli ndiswrapper.

Ho anche notato un messaggio DISABLING RQ 11 durante il caricamento dei dispositivi pci da parte di hotplug.

Cosa ne pensate?

----------

