Come funziona la cache del file system Linux
Il kernel si riserva una certa quantità di memoria di sistema per la memorizzazione nella cache degli accessi al disco del file system al fine di rendere più veloci le prestazioni complessive. La cache in Linux è chiamata Pagina Cache. La dimensione della cache di pagina è configurabile con generosi impostazioni predefinite abilitate a memorizzare nella cache grandi quantità di blocchi di disco. La dimensione massima della cache e le politiche di quando sfrattare i dati dalla cache sono regolabili con i parametri del kernel. L'approccio della cache Linux è chiamato cache di back-back. Ciò significa che se i dati vengono scritti sul disco, vengono scritti in memoria nella cache e contrassegnati come sporchi nella cache fino a quando non vengono sincronizzati su disco. Il kernel mantiene le strutture di dati interne per ottimizzare quali dati sfrattare dalla cache quando è necessario più spazio nella cache.
Durante le chiamate di sistema di lettura di Linux, il kernel verificherà se i dati richiesti vengono archiviati in blocchi di dati nella cache, che sarebbe un colpo di cache di successo e i dati verranno restituiti dalla cache senza fare alcun IO al sistema disco. Per una cache Miss i dati verranno recuperati dal sistema IO e la cache aggiornata in base alle politiche di memorizzazione nella cache poiché è probabile che questi stessi dati vengano richiesti di nuovo.
Quando si raggiungono alcune soglie di utilizzo della memoria inizieranno a scrivere dati sporchi su disco per assicurarsi che stia cancellando la cache di memoria. Questi possono avere un impatto sulle prestazioni delle applicazioni intensive di memoria e della CPU e richiedono la messa a punto da parte di amministratori e / o sviluppatori.
Utilizzo del comando gratuito per visualizzare l'utilizzo della cache
Possiamo utilizzare il comando gratuito dalla riga di comando per analizzare la memoria del sistema e la quantità di memoria allocata alla memorizzazione nella cache. Vedi comando sotto:
# gratuito -m
Quello che vediamo dal gratuito Il comando sopra è che ce n'è 7.5 GB di RAM su questo sistema. Di questo viene utilizzato solo 209 MB e 6.5 MB è gratuito. 667 MB viene utilizzato nella cache del buffer. Ora proviamo ad aumentare quel numero eseguendo un comando per generare un file di 1 gigabyte e leggere il file. Il comando seguente genererà circa 100 MB di dati casuali e quindi aggiungerà insieme 10 copie del file in una grande_file.
# dd if =/dev/casuale di =/root/data_file count = 1400000
# per i in 'seq 1 10'; Echo $ i; Cat Data_File >> Larg_file; Fatto
Ora ci assicureremo di leggere questo file di 1 concerto e quindi di controllare di nuovo il comando gratuito:
# cat grande_file> /dev /null
# gratuito -m
Possiamo vedere l'utilizzo della cache del buffer è salito da 667 a 1735 megabyte un aumento di circa 1 gigabyte nell'uso della cache del buffer.
Comando di cache di cache VM PROC SYS
Il kernel Linux fornisce un'interfaccia per eliminare la cache, proviamo questi comandi e vediamo l'impatto sull'impostazione gratuita.
# echo 1>/proc/sys/vm/drop_caches
# gratuito -m
Possiamo vedere sopra che la maggior parte dell'allocazione della cache del buffer è stata liberata con questo comando.
Verifica sperimentale che drop cache funziona
Possiamo fare una convalida delle prestazioni dell'utilizzo della cache per leggere il file? Leggiamo il file e scriviamolo su /dev /null per testare quanto tempo ci vuole per leggere il file dal disco. Lo faremo cronometro con il tempo comando. Facciamo questo comando immediatamente dopo aver cancellato la cache con i comandi sopra.
Ci sono voluti 8.4 secondi per leggere il file. Leggiamolo di nuovo ora che il file dovrebbe essere nella cache del filesystem e vediamo quanto tempo ci vuole ora.
Boom! Ci è voluto solo .2 secondi rispetto a 8.4 secondi per leggerlo quando il file non è stato memorizzato nella cache. Per verificare, ripetiamolo di nuovo cancellando prima la cache e quindi leggendo il file 2 volte.
Ha funzionato perfettamente come previsto. 8.5 secondi per la lettura non cache e .2 secondi per la lettura memorizzata.
Conclusione
La cache di pagina è automaticamente abilitata sui sistemi Linux e renderà trasparente IO più veloce memorizzando i dati usati di recente nella cache. Se si desidera cancellare manualmente la cache che può essere eseguita facilmente inviando un comando Echo al filesystem /proc che indica al kernel per rilasciare la cache e liberare la memoria utilizzata per la cache. Le istruzioni per l'esecuzione del comando sono state mostrate sopra in questo articolo e sono state mostrate anche la convalida sperimentale del comportamento della cache prima e dopo il lavaggio.