Trova la cache


10

Sembra che la prima volta che corro findo lssu una directory, ci vuole del tempo per funzionare. Ma, ogni volta in seguito, è veloce, come se un elenco dei contenuti della directory fosse stato memorizzato nella cache o indicizzato da qualche parte.

C'è un modo per preservare questa cache tra i riavvii del computer?


1
È davvero memorizzato nella cache. Linux utilizza memoria inutilizzata come cache e buffer (questo è uno dei motivi per cui dovresti sempre avere un po 'di scambio, anche con RAM "sufficiente"). Il comando gratuito mostra quanto è disponibile. Non sono sicuro che abbia molto senso la memorizzazione nella cache tra i riavvii, molto può cambiare tra stivali. Che ne dici di fare un cron-job da eseguire con la priorità più bassa ogni 10,30 minuti, per passare semplicemente attraverso tutti i tuoi file? Dovrebbe mantenere la cache relativamente aggiornata in ogni momento. Pensa anche che ci sia un modo (per il kernel) per rilevare le modifiche ai file.
Baard Kopperud,

Risposte:


8

È possibile utilizzare vmtouch per aggiungere file alla cache della pagina (cache del disco).

Inserisci il nohup vmtouch -dl <files or directories> &tuo /etc/rc.localfile per aggiungere e bloccare i file nella cache della pagina all'avvio. Se si desidera aggiungere file alla cache della pagina, ma non si desidera bloccarli in memoria, utilizzare il -tflag anziché i -ldflag.

Per ulteriori informazioni sulla cache della pagina, guarda qui , qui e su Wikipedia .


Questo comando non sembra disponibile in Ubuntu: esiste un'alternativa che posso provare?
Richard,

@Richard È molto semplice compilare vmtouch da soli: installa il build-essentialpacchetto. Scarica vmtouch.c. Esegui gcc -O2 -o vmtouch vmtouch.co make vmtouche ottieni il file binario vmtouchche puoi copiare ad esempio /usr/local/bino chiamare ./vmotouch.
jofel,

@Richard Non uso Ubuntu, quindi non l'ho testato e non mi assumo alcuna responsabilità, ma cercare su Google "Ubuntu mvtouch" ha sollevato questo ppa .
terdon

@jofel, sì, è stato abbastanza facile da compilare - grazie. Preferisco solo usare i pacchetti quando possibile.
Richard,

@Evan, correggimi se sbaglio, ma non usare vmtouchcome comando di avvio rallenterebbe il tutto? La mia speranza era stata quella di preservare una cache attraverso gli stivali piuttosto che (costoso) rigenerarla ogni volta.
Richard,

2

"Conserva attraverso i riavvii", ne dubito. Ma puoi banalmente ricostruire la cache all'avvio, il che fa quasi la stessa cosa meno un piccolo ritardo.

Crea un file /etc/cron.d/rebuild-fs-cachee inserisci quanto segue:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

Questo usa nicee ionice(che dovrebbe essere installato di default e sicuramente disponibile tramite il gestore dei pacchetti; Debian li inserisce coreutilse util-linux, rispettivamente, per abbassare la priorità del findprocesso ai livelli più belli possibili, il che significa che non dovrebbe interferire con nient'altro in esecuzione sul sistema ma richiederà un po 'più di tempo per il completamento. findpasserà attraverso se stesso e stat()tutto ciò, che forza il kernel a caricare i dati del file system dal disco in memoria.

Una volta che la cache è stata creata, purché non venga cancellata perché il sistema operativo ha bisogno della memoria per qualcos'altro, dovrebbe essere mantenuto. Lo sto usando da un po 'e gli elenchi di directory anche in directory di grandi dimensioni sono significativamente più veloci che senza il cron job sopra, anche se non posso citare alcun numero esatto.


1
Se hai intenzione di reinventare la ruota, potresti anche usare locate, che viene fornito updatedbper aggiornare un database di individuazione: en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@laebshade Non uso locateaffatto, ma uso lsmolto. E di tanto in tanto find. (Inoltre, find e ls sono i comandi specifici richiesti dall'OP.) Il punto di usare findqui è che scorre su tutto ciò che si trova sullo storage chiamando stat (), quindi il kernel deve caricare i metadati in memoria. Una volta che è lì, è buono come se fosse archiviato al riavvio.
un CVn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.