Forzare memoria fisica sotto linux

Forum dedicato agli studenti del corso linux e a tutti gli amanti del pinguino!

Moderatore: matteo

Forzare memoria fisica sotto linux

Messaggioda andrea » gio feb 14, 2008 4:27 pm

Sto facendo un progetto per l'università, in particolare sto implementando un model checker (un programma che verifica se altri programmi che gli passi in input sono corretti, cioè se soddisfano determinate specifiche). Quando lancio il programma che ho realizzato, per motivi di efficienza mi è stato raccomandato dal prof di fare di tutto per non farlo accedere al disco, e ovviamente di non fargli usare la memoria virtuale, perché dovendo provare milioni (o anche miliardi) di combinazioni ha bisogno della massima velocità possibile, infatti anche usando solo la memoria fisica può metterci qualche ora prima di concludere la verifica. Se però usa la memoria virtuale allora potrebbe non terminare più, perché la memoria su disco è estremamente più lenta della RAM e potrebbero volerci giorni per eseguire tutte le operazioni...

come posso forzare un processo ad usare solo la memoria fisica e non quella virtuale??
andrea
 
Messaggi: 42
Iscritto il: mar ott 09, 2007 10:28 am

Re: Forzare memoria fisica sotto linux

Messaggioda matteo » gio feb 14, 2008 5:16 pm

come posso forzare un processo ad usare solo la memoria fisica e non quella virtuale??

disattivando la swap ^__^

non ci sono altri modi, mi dispiace.
La parte di kernel che gestisce la memoria virtuale, non tiene conto né sa a quale processo sia associata la ram che swappa.

Matteo
matteo
 
Messaggi: 327
Iscritto il: ven mar 17, 2006 10:22 am

Messaggioda andrea » gio feb 14, 2008 5:32 pm

Il mio prof mi diceva che c'era anche un comando (che però lui ha scordato) da usare sulla shell che limita la quantità di memoria che può essere usata prima di dare un errore di memoria piena. E mi ha detto che se imposto questa quantità uguale alla quantità di memoria fisica allora userà solo quella fisica. Boh, adesso glielo richiedo... comunque non ho capito una cosa. Ma la memoria virtuale viene usata solo quando la memoria fisica è completamente piena, oppure anche quando non è piena?

La swap bisogna essere amministratore per disattivarla giusto? e come si disattiva?
andrea
 
Messaggi: 42
Iscritto il: mar ott 09, 2007 10:28 am

Messaggioda matteo » gio feb 14, 2008 6:22 pm

andrea ha scritto:Il mio prof mi diceva che c'era anche un comando

forse ulimit (cerca limits.conf sotto /etc/ e cerca ulimit in man bash)



da usare sulla shell che limita la quantità di memoria che può essere usata prima di dare un errore di memoria piena.

Puoi limitare la memoria virtuale (la mem virt non è la swap ma la somma tra swap e ram)

E mi ha detto che se imposto questa quantità uguale alla quantità di memoria fisica allora userà solo quella fisica.

Per fare questo devi impostare i limiti inferiori, ma solitamente si possono impostare limiti superiore.
Effettivamente ora che vedo, il modo di loccare la propria memoria in ram c'è, ma deve essere il programma stesso a richiederlo, mi sembra (effettivamente il kernel può marcare pagine come loccate). Cercherò meglio.

Codice: Seleziona tutto
comunque non ho capito una cosa. Ma la memoria virtuale viene usata solo quando la memoria fisica è completamente piena, oppure anche quando non è piena?

si e no.
quando carico un programma o in generale un processo alloca memoria, questa viene messa in ram e se non c'è spazio disponibile se ne swappa un po'. E questo è abbastanza intuibile.
quello meno intuibile è che a tempo perso TUTTA la ram viene replicata nella swap (per questo la swap partition deve essere almeno la dimensione della ram), così quando devo caricare un nuovo programma in memoria e non c'è spazio, non perdo tempo a copiarne un po' dalla ram alla swap, perchè già c'è e posso più rapidamente deallocare la ram.
In questo modo la swap viene utilizzata per velocizzare la memoria anzichè rallentare.
Se poi la si chiede troppo rapidamente (troppi programmi aperti in uso), allora l'operazione di swapping si fa sentire. In tal caso l'unica soluzione è acquistare ram.

La swap bisogna essere amministratore per disattivarla giusto?

ovviamente
e come si disattiva?

swapoff -a per torglierla temporaneamente e swapon -a per riattivarla
ovviamente se hai già allocato la swap e non hai spazio in ram non te la fa disattivare.
per non attivarla per niente commenta le righe con la scritta 'swap' in /etc/fstab

Matteo
matteo
 
Messaggi: 327
Iscritto il: ven mar 17, 2006 10:22 am


Torna a Unix, Linux & reti

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti

cron