Articles

Come cancellare la cache su Linux

La cache del file system linux (Cache delle pagine) viene utilizzata per rendere più veloci le operazioni di IO. In determinate circostanze un amministratore o uno sviluppatore potrebbe voler svuotare manualmente la cache. In questo articolo spiegheremo come funziona la cache del file system Linux. Quindi dimostreremo come monitorare l’utilizzo della cache e come cancellare la cache. Faremo alcuni semplici esperimenti sulle prestazioni per verificare che la cache funzioni come previsto e che anche la procedura di svuotamento e pulizia della cache funzioni come previsto.

Come funziona la cache del file system Linux

Il kernel riserva una certa quantità di memoria di sistema per memorizzare nella cache gli accessi al disco del file system al fine di rendere le prestazioni complessive più veloci. La cache in linux è chiamata Cache della pagina. La dimensione della cache della pagina è configurabile con valori predefiniti generosi abilitati alla cache di grandi quantità di blocchi disco. La dimensione massima della cache e le politiche di quando espellere i dati dalla cache sono regolabili con i parametri del kernel. L’approccio della cache di linux è chiamato cache di write-back. Ciò significa che se i dati vengono scritti su disco, vengono scritti in memoria nella cache e contrassegnati come sporchi nella cache fino a quando non vengono sincronizzati su disco. Il kernel mantiene strutture di dati interne per ottimizzare i dati da eliminare dalla cache quando è necessario più spazio nella cache.

Durante le chiamate di sistema di lettura Linux, il kernel controllerà se i dati richiesti sono memorizzati in blocchi di dati nella cache, che sarebbe un successo della cache e i dati saranno restituiti dalla cache senza fare alcun IO al sistema del disco. Per una mancanza di cache 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 nuovamente richiesti.

Quando vengono raggiunte determinate soglie di utilizzo della memoria, le attività in background inizieranno a scrivere dati sporchi su disco per assicurarsi che stia cancellando la cache di memoria. Questi possono avere un impatto sulle prestazioni della memoria e applicazioni ad alta intensità di CPU e richiedono messa a punto da amministratori e sviluppatori o.

Usando il comando Libero per visualizzare l’utilizzo della cache

Possiamo usare il comando libero dalla riga di comando per analizzare la memoria di sistema e la quantità di memoria allocata alla cache. Vedi il comando qui sotto:

# free-m

Quello che vediamo dal comando libero sopra è che ci sono 7,5 GB di RAM su questo sistema. Di questo solo 209 MB è utilizzato 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 leggendo il file. Il comando seguente genererà circa 100 MB di dati casuali e quindi aggiungerà 10 copie del file insieme in un file large_file.

# dd if=/dev/random of=/root/data_file count=1400000
# for i in `seq 1 10`; do echo $i; cat data_file >> large_file; fatto

Ora faremo in modo di leggere questo 1 Giga di file e quindi verificare la connessione di nuovo il comando:

# cat large_file > /dev/null
# free -m

Siamo in grado di vedere la cache del buffer di utilizzo, è salito da 667 a 1735 Megabyte circa 1 Gigabyte aumento dell’utilizzo del buffer cache.

Proc Sys VM Drop Caches Command

Il kernel linux fornisce un’interfaccia per eliminare la cache proviamo questi comandi e vediamo l’impatto sull’impostazione libera.

# echo 1 > /proc/sys/vm/drop_caches
# free -m

Possiamo vedere che la maggior parte del buffer cache di assegnazione è stato liberato con questo comando.

Verifica sperimentale che le cache drop funzionino

Possiamo fare una convalida delle prestazioni dell’utilizzo della cache per leggere il file? Leggiamo il file e lo riscriviamo in / dev / null per verificare quanto tempo ci vuole per leggere il file dal disco. Lo cronometreremo con il comando del tempo. 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 vedere quanto tempo ci vuole ora.

Boom! Ci sono voluti solo .2 secondi rispetto a 8,4 secondi per leggerlo quando il file non è stato memorizzato nella cache. Per verificare ripetiamo nuovamente questa operazione prima cancellando la cache e poi leggendo il file 2 volte.

Ha funzionato perfettamente come previsto. 8.5 secondi per la lettura non memorizzata nella cache e .2 secondi per la lettura nella cache.

Conclusione

La cache delle pagine è abilitata automaticamente sui sistemi Linux e renderà trasparente l’IO più veloce memorizzando i dati utilizzati di recente nella cache. Se si desidera cancellare manualmente la cache che può essere fatto facilmente inviando un comando echo al filesystem / proc indicando al kernel di 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 flushing.