|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2005
Messaggi: 65
|
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. |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: Dec 2004
Messaggi: 17
|
In Windows puoi usare GlobalMemoryStatus.
__________________
![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 18-04-2005 alle 08:29. |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
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).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Apr 2005
Messaggi: 65
|
Quote:
![]() 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? ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Apr 2005
Messaggi: 65
|
Quote:
Cmq si', quando girano le simulazioni sono l'unico processo attivo (uno per proc). |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#8 | |
Member
Iscritto dal: Apr 2005
Messaggi: 65
|
Quote:
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 ![]() |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Non conosco il fortran...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:48.