2015-05-02 13 views
19

La mia domanda è un'estensione di questo How to manipulate page cache in Linux?Linux Page Cache - Eliminazione di una pagina dalla cache pagina in kernel

stavo cercando di fare un piccolo progetto che mira a limitare la dimensione della cache delle pagine utilizzato su una base per base di file. L'approccio che ho usato è stata la seguente -

  1. Mantenere una coda kfifo di puntatori di pagina in cui vengono aggiunti alla cache della pagina.
  2. Aggiungere un gancio in add_to_page_cache_lru() e verificare se la dimensione dell'albero radix (lo spazio indirizzo) di un file è più di una dimensione predeterminata, quindi scegliere una vittima dalla coda fifo ed eliminare la pagina dalla pagina cache.
  3. ho usato le funzioni delete_from_page_cache() e try_to_unmap() per espellere la pagina dalla cache di pagina, seguita da put_page() rilasciare una pagina.

Mi aspetto questo codice per liberare le pagine e rilasciare la memoria ma ciò non sembra accadere. Ad esempio, se leggo un file di dimensioni 25 MB e ho limitato la dimensione della cache della pagina per questo file a 512 pagine (2 MB), quindi mi aspetto di vedere un cambiamento di soli 2 MB nella memoria libera (gratuito -m). Quello che vedo invece è che il 25MB completo viene consumato e mostrato nel comando libero.

Che altro devo fare per garantire che i miei requisiti siano soddisfatti? Non ho ancora pensato alle pagine sporche perché non riuscivo nemmeno a farlo funzionare per le letture (cat il file). Qualsiasi suggerimento sarebbe utile.

P.S. - Sto usando linux 4.0 per questo progetto.

+2

Su un nota correlata, controlla l'implementazione di 'drop_caches' all'interno del kernel, ovvero come realizza qualcosa di simile. http://stackoverflow.com/a/32288932/319204 – TheCodeArtist

+0

@TheCodeArtist Grazie! Darò sicuramente questo a provare. – Singh

+0

Sospetto che il sistema operativo possa rendere assunzioni su file aperti e utilizzi la memoria da solo, indipendentemente da ciò che si chiede, solo per migliorare le prestazioni di accesso. Guarda cosa fa senza richiedere alcuna cache (solo file aperti) e controlla la memoria libera. Quindi prova un file assolutamente voluminoso e vedi quanto il sistema operativo mette da parte per la cache in questo caso. Potrebbe essere la tua taglia migliore con cui lavorare. In caso contrario, potrebbe essere necessario creare il proprio spazio nella cache di memoria privata e copiare il bit che si desidera memorizzare nella cache, quindi chiudere la connessione al file. –

risposta

Problemi correlati