Grep utilizza una cache per velocizzare le ricerche?


36

Ho notato che le successive esecuzioni grepsulla stessa query (e anche una query diversa, ma sullo stesso file) sono molto più veloci della prima esecuzione (l'effetto è facilmente evidente quando si esegue la ricerca in un file di grandi dimensioni).

Ciò suggerisce che grep utilizza una sorta di memorizzazione nella cache delle strutture utilizzate per la ricerca, ma non sono riuscito a trovare un riferimento su Internet.

Quale meccanismo consente grepdi restituire risultati più velocemente nelle ricerche successive?

Risposte:


60

Non grep in quanto tale, ma il file system stesso spesso memorizza nella cache dati di recente lettura, facendo sì che le esecuzioni successive siano più veloci poiché grep sta effettivamente effettuando una ricerca nella memoria anziché sul disco.


2
Concordo. La prima volta che si esegue il grep di un file, il codice del filesystem carica il file dal disco nella cache; quando lo si esegue nuovamente dopo poco tempo, non ha ancora avuto il tempo di scadere dalla cache. Verifica se esiste un modo per svuotare manualmente la cache del filesystem, quindi confronta prima e dopo i tempi.
Shadur,

3
@Shadur - c'è un modo. Vedi unix.stackexchange.com/questions/8398/…
mattdm

3
Non c'è alcuna differenza pratica, ma è una cache del kernel, non il filesystem.
inizio

@pboin Ok, ho preso una piccola scorciatoia. Naturalmente è la parte del kernel che gestisce il filesystem che esegue la memorizzazione nella cache non il filesystem (sul disco) in sé. Pedante ma vero. :)
PaulRein,

19

I sistemi Linux e * NIX fanno uso di varie cache che si trovano tra i filesystem (astratti attraverso VFS) e i processi a livello di utente. Quindi non è grep e non è il filesystem che esegue la memorizzazione nella cache: è il sistema operativo.

La cache responsabile delle prestazioni di grep è la cache buffer VFS. Altre cache sono per inode e directory ma quelli non entrerebbero in gioco qui.

Per maggiori informazioni, consultare: Progetto di documentazione Linux: 9.2 Il file system virtuale http://tldp.org/LDP/tlk/fs/filesystem.html


5
Se stai eseguendo un grep ricorsivo, le cache dell'inode e dell'odontoiatria fanno una notevole differenza. In un test, un grep nel giro di /usr/includecirca 16,4 secondi sul mio sistema ha lasciato cadere tutte le cache. Con tutto memorizzato nella cache, circa 0,3 secondi. Se lascio cadere solo la cache della pagina (che contiene la cache del buffer), ci vogliono circa 14,3 secondi. Se esco dalla cache della pagina e rilasciamo le cache di odontoiatria / inode, sono circa 12 secondi.
Mattdm,

@mattdm, è interessante. Come hai lasciato cadere le cache?
JRW,


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.