J'ai remarqué que des passages ultérieurs de grep
la même requête (et également d'une requête différente, mais du même fichier) sont beaucoup plus rapides que la première exécution (l'effet est facilement perceptible lors de la recherche dans un fichier volumineux).
Cela suggère que grep utilise une sorte de cache des structures utilisées pour la recherche, mais que je n'ai pas trouvé de référence sur Internet.
Quel mécanisme permet grep
de renvoyer les résultats plus rapidement lors de recherches ultérieures?
Les systèmes Linux et * NIX utilisent divers caches situés entre les systèmes de fichiers (résumés via VFS) et les processus de niveau utilisateur. Donc, ce n'est pas grep et ce n'est pas le système de fichiers qui fait la mise en cache, c'est le système d'exploitation.
Le cache qui est responsable de vos performances grep est le cache tampon VFS. D'autres caches sont destinés aux inodes et aux répertoires, mais ceux-ci n'entrent pas en ligne de compte.
Pour plus d'informations, voir: Projet de documentation Linux: 9.2 Le système de fichiers virtuel http://tldp.org/LDP/tlk/fs/filesystem.html
la source
/usr/include
pris environ 16,4 secondes sur mon système avec tous les caches supprimés. Avec tout en cache, environ 0,3 seconde. Si je ne supprime que le cache de pages (qui contient le cache de tampons), cela prend environ 14,3 secondes. Si je quitte le cache des pages et lâche les caches dentry / inode, le temps est d'environ 12 secondes.Et si vous êtes à la recherche d'une version en cache de grep, consultez https://stackoverflow.com/questions/7734596/grep-but-indexable
la source