[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Disabilitare tutti i filesystem in ram



On 29/12/16 12:04, Davide Prina wrote:
On 28/12/2016 20:12, Nicola Manca wrote:
On 28/12/16 18:40, Davide Prina wrote:
On 28/12/2016 12:03, Nicola Manca wrote:

riesco in nessun modo ad azzerare la voce buff/cache che ha sempre
600/900MB occupati.

non ho capito!
Ma se disabiliti la buff/cache avrai prestazioni pessime del tuo
sistema. O forse non ho capito io cosa intendi?

Da quanto ho letto buff/cache dovrebbe essere occupato in modo
flessibile, rimpicciolendosi se un programma richiede memoria.

la cache e i buffer allocati e non usati attivamente vengono sostituiti
da altri dati/istruzioni che hanno bisogno di essere usati/eseguite.

Questo
non avviene e se lancio programmi un po' esosi (tipo analisi dati in
python) non posso allocare in totale più di 2.8 GB su 4 GB di RAM perchè
buff/cache non si svuota.

prima di tutto è normale che non si svuotino, perché più che svuotamento
di solito è seguita la logica della sostituzione.

A me va bene che non si svuoti, ma mi chiedo come mai ne serva così tanta. esiste un modo per capire come mai? la mia domanda iniziale era dovuta al fatto che pensavo fossero dei filesystem in ram che potessero essere spostati su disco senza troppi problemi. Magari ci sono altre cause di questo utilizzo ma non so come capirlo.

Poi tu dici che devi caricare 2,8GB di dati, ma da dove ricavi che sono
2,8GB?
Probabilmente vedi lo spazio occupato su disco?
Ma all'interno del programma come vengono gestiti? O meglio sono
caricati in un buffer di 2,8GB o sono inseriti dentro una struttura? Nel
primo caso l'occupazione reale è di poco superiore ai 2,8GB, mentre nel
secondo caso potrebbe essere anche notevolmente superiore... dipende dal
tipo di struttura.

Non sono 2.8BG di dati, semplicemente quando faccio girare software che alloca memoria vedo dal monitor del pannelo di plasma che raggiunti i 2.8GB il SO inizia ad allocare swap, e se guardo free -h quanto questo accade ho circa 1.1GB di RAM allocata in buffc/cache 2.8+1.1=3.9Gb che è tutta quella che ho.

Inoltre non tieni conto di:
* quanta memoria ha bisogno il tuo programma
* quanta memoria ha bisogno il tuo programma per elaborare dei dati
caricati in RAM
* quanta memoria è usata da altri programmi/servizi/... in esecuzione
* quanta memoria è usata dal sistema operativo
* sono in esecuzione altri servizi che possono far uso di molta RAM?

Se hai 4GB di RAM è possibile che una fetta consistente sia già occupata
prima che tu esegua il tuo programma.

Il mio era un esempio, a volte capita anche se ho alcune tab di firefox(magari con flash)+libreoffice+icedove e poche altre cose (uso desktop 'normale' ma magari con un op' troppe cose aperte). Il fatto è che in tutti i casi ho sempre bisogno di pochi centinaia di MB di swap, mi chiedevo se esiste un modo di recuperarli dal buff/cache, dato che non riesco a capire per cosa ci sia dentro.

Fai così:

1) avvii il PC e ti prepari per eseguire il programma, cioè fai tutti
gli step necessari prima di eseguirlo (es: login, apertura di una shell,
...)

2) controlli quanta memoria hai a disposizione:
$ free -h

NOTA: guarda $ man free

Segnati:
Mem Total:
Mem Available:
Swap Total:
Swap Used:


Di questi valori il più importante per te è "Mem Available", perché con
questo sai quanta RAM può occupare un programma che esegui senza che
venga utilizzato lo swap.

Se hai Linux >= 3.14, allora hai un calcolo abbastanza preciso, perché
tiene in conto i cache/buffer che non sono attualmente in uso.

3) esegui il tuo programma

4) riesegui il comando "$ free -h"... però io non so come funziona e
quindi non so dirti bene quando eseguirlo, se eseguirlo più volte, ...
in modo da capire quanta memoria necessita. Per esempio se prima si
carica un'interfaccia e da questa puoi eseguire più azioni (es:
caricamento dati, esecuzione elaborazione, ...), allora puoi eseguirlo
prima di ogni azione

il problema non è legato ed uno specifico programma (vd. sopra) ma al funzionamento generale.

[...]
Ho provato con "echo 3 > /proc/sys/vm/drop_caches"
ma nulla

ma sai a cosa serve quel comando?

"Use of this file can cause performance problems. Since it discards
cached objects, it may cost a significant amount of I/O and CPU to
recreate the dropped objects, especially if they were under heavy use.
Because of this, use outside of a testing or debugging environment is
not recommended."

leggi qui:
https://www.kernel.org/doc/Documentation/sysctl/vm.txt

"testing" era esattamente la mia intenzione,

ma io penso che quel "testing or debugging environment" è per testare il
funzionamento di quella parte di Linux... comunque

quel comando dovrebbe azzerare buff/cache ma non lo fa

ma quel comando può farlo solo per quella parte di buff/cache che è
allocata, ma non attualmente usata

allora vuol dire che ho utilizzato 700MB, come posso scoprire da cosa?

[...]
Ciao
Davide


Spero di essermi spiegato, il mio problema è che non capisco COSA occupi la cache, magari non ci posso fare nulla ma magari si, potrebbe essere un filesystem in RAM che può essere spostato su disco, oppure dei logfile troppo grossi come da quanto sembra qua (http://serverfault.com/questions/288319/linux-not-freeing-large-disk-cache-when-memory-demand-goes-up , putroppo non sembra essere il mio caso). Magari non ci posso fare nulla ma almeno so come mai.

grazie della disponibilità,
Nicola


Reply to: