View Full Version : Determinare la memoria fisica libera.
Non so se e' gia' stato affronatato questo argomento, ma la ricerca e' disabilitata, quindi.....
Ho questo problema.
Come posso determinare quanta memoria (fisica) libera ha il sistema?
Programmo in Fortran per simulazioni matematiche molto pese. La dimensione della memoria allocata durante l'esecuzione varia a seconda della geometria in ingreso al programma (si parla di vettori piu' grossi di 2 GB di solito).
Succede a volte che la dimensione allocata supera la memoria libera e il programma swappa. Siccome la simulazione di solito dura piu' di un giorno, se mi comincia a swappare, ci metterebbe un mese e mi fonderebbe il disco!
Quindi sono costretto a verificare "a mano" se swappa o meno.
Non esiste una routine (Fortran o C) per determinare la mem libera?
Magari che non funzioni solo sotto win.
Grazie.
Pilucchino
18-04-2005, 08:16
In Windows puoi usare GlobalMemoryStatus (http://msdn.microsoft.com/library/en-us/memory/base/globalmemorystatus.asp).
ilsensine
18-04-2005, 08:24
DMA['] Magari che non funzioni solo sotto win.
La tua richiesta è quanto di più platform-dependent ci sia.
Sotto linux non è praticamente possibile determinare la memoria fisica libera (o meglio: puoi farlo se vuoi, ma è un valore senza alcun senso -- almeno non quello che cerchi tu). Sotto windows dubito che la situazione sia molto diversa.
ilsensine
18-04-2005, 08:28
DMA[']Non so se e' gia' stato affronatato questo argomento, ma la ricerca Succede a volte che la dimensione allocata supera la memoria libera e il programma swappa. Siccome la simulazione di solito dura piu' di un giorno, se mi comincia a swappare, ci metterebbe un mese e mi fonderebbe il disco!
devi mettere in memlock la memoria che non vuoi swappare. Nota che questo può aumentare lo swap per gli altri programmi. Se il tuo è l'unico processo praticamente attivo, puoi fregartene.
Devi ovviamente avere a disposizione sufficiente RAM per effettuare il lock (non è necessariuo che sia tutta disponibile quando lanci il programma; eventuali swapout saranno fatti dal s/o se necessario al momento della richiesta).
La tua richiesta è quanto di più platform-dependent ci sia.
Sotto linux non è praticamente possibile determinare la memoria fisica libera (o meglio: puoi farlo se vuoi, ma è un valore senza alcun senso -- almeno non quello che cerchi tu). Sotto windows dubito che la situazione sia molto diversa.
:(
Ecco perche' non riuscivo a trovare nulla.
L'idea mi e' venuta vedendo porgrammi come Pirme95 (per es) che ti riempono tutta la mem fisica libera che hai in quel momento. Ho pansato... "ecco, potrei fare cosi'!"
E invece..... Ma loro come fanno? :confused:
Devi ovviamente avere a disposizione sufficiente RAM per effettuare il lock (non è necessariuo che sia tutta disponibile quando lanci il programma; eventuali swapout saranno fatti dal s/o se necessario al momento della richiesta).
Ma posso considerare di usare tutta la mem fisica che ho? Oppure e' bene lasciarne un certo quantitativo per l'OS.
Cmq si', quando girano le simulazioni sono l'unico processo attivo (uno per proc).
ilsensine
18-04-2005, 10:09
DMA[']Ma posso considerare di usare tutta la mem fisica che ho? Oppure e' bene lasciarne un certo quantitativo per l'OS.
Cmq si', quando girano le simulazioni sono l'unico processo attivo (uno per proc).
Più ti avvicino al limite della memoria disponibile, più il rischio che il lock fallisca aumenta ovviamente.
Rileggendo bene il tuo problema, temo che effettivamente il tuo processo richieda _più_ della ram di sistema: se ne richiedesse meno, ci sarebbe uno swapout iniziale e poi un funzionamento corretto "a regime", soprattutto se il tuo processo è l'unico cpu hog in giro.
Il lock della memoria in effetti non si usa per ridurre lo swapout selvaggio (che se è presente, è sempre sintomo di qualcosa che non va); anzi paradossalmente aumenta la probabilità di swapout. Il lock si usa per programmi che richiedono bassa latenza e non possono "tollerare" di attendere lo swapin o un COW per gestire un evento ad alta priorità, oppure che per motivi di "sicurezza" non vogliono che dei dati sensibili finiscano involontariamente scritti su disco.
Rileggendo bene il tuo problema, temo che effettivamente il tuo processo richieda _più_ della ram di sistema: se ne richiedesse meno, ci sarebbe uno swapout iniziale e poi un funzionamento corretto "a regime", soprattutto se il tuo processo è l'unico cpu hog in giro.
Esatto! A volte la simulazione richiede piu' della ram di sitema e io la voglio troncare sul nascere.
mmm... quindi sarebbe sufficiente controllare che la quantita' allocata non sia superiore della ram e poi (dopo lo swapout iniziale degli altri processi) a regime tutto andrebbe bene.
E quindi, mi sorge spontanea l'altra domanda:
come fo a vedere quanta memoria sto per allocare (fortran)??
Lo so forse e' stupida, ma non ne ho idea, l'unica cosa che mi viene in mente e' fare un conto basato sulla dimensione e il tipo di dati che sto per allocare (ma e' un po' poco ortodosso!!)
Grazie :)
ilsensine
18-04-2005, 11:24
Non conosco il fortran...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.