On Wed, 2009-09-23 at 19:19 +0200, Ernesto wrote: > > Nel senso la memoria esitente...bo non capisco cmq per vedere la > > quantita di memoria del sistema su Linux > > > In pratica, vorrei aggiungere un'opzione in uno script che in funzione > della memoria a disposizione possa scegliere se caricare o meno tutte > le info contenute in un file dato in input. > > Ernesto
IMHO, ti stai complicando inutilmente la vita. Proprio per farla semplice, non esiste piu' il concetto di "memoria libera" ma si usa quello di "memoria ancora non utilizzata". Questo perche' e' oramai un assioma che memoria non utilizzata e' uguale a memoria sprecata. Per questo motivo, su qualsiasi sistema operativo moderno dopo poco tempo troverai tutta (o buona parte) della memoria occupata anche se apparentemente non la sta usando nessuno. Buona parte su Linux viene utilizzata per la page cache e all'occorrenza viene ridata ai processi che ne abbiano bisogno. Poi hai la swap, che per il tuo processo e' memoria utilizzabile. Ci sono poi i limiti che ogni bravo sysadmin dovrebbe imporre ai processi non privilegiati, tra cui c'e' anche quello della memoria virtuale (l'address space). Sono gia' tre cose che devi tenere in considerazione. Non vuoi che il tuo file finisca in swap ? allora dovrai allocare la memoria e poi lockarla oppure usare la funzione (in C) mlockall(MCL_FUTURE) che locka tutto il cucuzzaro. Questo introduce un'altra porzione al tuo codice (tra l'altro non so neanche se mlockall sia esportata in python o se dovrai implementarla a manina). Una prima formula per ricavare quanta memoria ha a disposizione il tuo processo potrebbe essere: Memoria_fisica_libera + Page_Cache (li ricavi sempre leggendo /proc/meminfo) Poi devi usare getrlimit() per sapere se la memoria che puo' mappare il tuo processo rientra nei limiti. Per sapere quanta memoria ha mappato gia' il tuo processo devi leggere il file /proc/self/stat ("man proc" ti aiutera' a farne il parsing) Tieni sempre a mente che si sta parlando di memoria virtuale, sapere quanta memoria fisica occupa un processo e' materia oscura, e Linux stesso si basa su un compromesso che spesso e volentieri non corrisponde a realta'. Per questo motivo non puoi neanche limitare la quantita' di memoria fisica che un singolo processo (sebbene setrlimit lo preveda) puo' allocare. Se dopo tutto questo pippone sei ancora convinto che sia l'approccio giusto, direi che hai tutto cio' che ti serve :) -- Roberto De Ioris http://unbit.it JID: robe...@jabber.unbit.it _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python