Ho un sacco di codice in una libreria condivisa ELF che viene utilizzata solo durante l'inizializzazione della libreria (viene chiamata da inizializzatori statici). Se metto questo codice nella sua sezione (o forse può andare nella sezione .init), cosa che posso fare usando __attribute__((section(".mysection")))
, c'è un modo per forzare questa pagina a essere sfogliata dopo che la libreria è stata caricata?Sezione ELF flush dalla RAM dopo l'inizializzazione della libreria
This question è correlato, ma la conclusione è che il kernel eseguirà il page out delle pagine non utilizzate quando è a corto di memoria, quindi non è necessario farlo esplicitamente. Tuttavia, sto lavorando in un ambiente embedded in cui la memoria è un vantaggio e il costo del paging nel codice dal disco (una chiavetta USB lenta) è alto. Perciò preferirei svuotare esplicitamente questo codice, che so non verrà mai più utilizzato, piuttosto che decidere se il kernel debba decidere di svuotare qualche altro codice che potrebbe eventualmente essere richiamato.
I'm di sicuro ricordo di aver letto su un syscall per chiedere al kernel di entrare o uscire da certe regioni della memoria, anche se non riesco a trovare alcun riferimento a questo ovunque, quindi forse l'ho immaginato. Esiste una cosa del genere?
Il 'syscall' madvise', in particolare con il parametro MADV_WILLNEED/MADV_DONTNEED, è ciò a cui stavo pensando. Tuttavia, sono ancora interessato a sapere se c'è un modo semplice per forzare una particolare sezione ELF per essere sfogliata. – jchl