Recherche / ls de la mise en cache

10

Il semble que la première fois que j'exécute findou lssur un répertoire, cela prenne un certain temps pour fonctionner. Mais, à chaque fois par la suite, c'est rapide, comme si une liste du contenu du répertoire avait été mise en cache ou indexée quelque part.

Existe-t-il un moyen de conserver ce cache lors des redémarrages de l'ordinateur?

Richard
la source
1
Il est en effet mis en cache. Linux utilise de la mémoire inutilisée comme cache et tampons (c'est une des raisons pour lesquelles vous devriez toujours avoir du swap, même avec "assez" de RAM). La commande gratuite vous montre combien est disponible. Je ne suis pas sûr que la mise en cache entre les redémarrages soit utile, beaucoup de choses peuvent changer entre les démarrages. Que diriez-vous de faire un cron-job pour qu'il s'exécute avec la priorité la plus basse toutes les 10,30 minutes, pour simplement parcourir tous vos fichiers? Devrait garder le cache relativement à jour à tout moment. Pensez également qu'il existe un moyen (pour le noyau) de détecter les modifications de fichiers.
Baard Kopperud du

Réponses:

8

Vous pouvez utiliser vmtouch pour ajouter des fichiers à votre cache de pages (cache disque).

Mettez nohup vmtouch -dl <files or directories> &votre /etc/rc.localfichier pour ajouter et verrouiller des fichiers dans votre cache de pages au démarrage. Si vous souhaitez ajouter des fichiers à votre cache de pages, mais ne souhaitez pas les verrouiller en mémoire, utilisez l' -tindicateur au lieu des -ldindicateurs.

Pour plus d'informations sur le cache de pages, regardez ici , ici et sur wikipedia .

Communauté
la source
Cette commande ne semble pas disponible dans Ubuntu - existe-t-il une alternative que je peux essayer?
Richard
@Richard Il est très facile de compiler vmtouch vous-même: installez le build-essentialpaquet. Téléchargez vmtouch.c. Exécutez gcc -O2 -o vmtouch vmtouch.cou make vmtouchet vous obtenez le binaire vmtouchque vous pouvez ensuite copier /usr/local/binou appeler par exemple ./vmotouch.
jofel
@ Richard Je n'utilise pas Ubuntu, donc je n'ai pas testé cela et je ne prends aucune responsabilité mais googler "Ubuntu mvtouch" a fait apparaître ce ppa .
terdon
@jofel, oui, c'était assez facile à compiler - merci. Je préfère simplement utiliser des packages lorsque cela est possible.
Richard
@Evan, corrigez-moi si je me trompe, mais l'utilisation vmtouchd'une commande au démarrage ne ralentirait-elle pas le tout? Mon espoir avait été de conserver un cache entre les bottes plutôt que de le régénérer (cher) à chaque fois.
Richard
2

"Conserver malgré les redémarrages", j'en doute. Mais vous pouvez facilement reconstruire le cache au démarrage, ce qui accomplit presque la même chose sans un petit retard.

Créez un fichier /etc/cron.d/rebuild-fs-cacheet mettez-y les éléments suivants:

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

Cela utilise niceet ionice(qui devrait être installé par défaut, et certainement disponible via le gestionnaire de paquets; Debian les place dans coreutilset util-linux, respectivement) pour réduire la priorité du findprocessus aux niveaux les plus agréables possibles, ce qui signifie qu'il ne devrait interférer avec rien d'autre en cours d'exécution sur votre système, mais cela prendra un peu plus de temps. findlui-même passera par stat()tout ce qui oblige le noyau à charger les données du système de fichiers du disque dans la mémoire.

Une fois le cache créé, tant qu'il n'est pas purgé car le système d'exploitation a besoin de la mémoire pour autre chose, il doit être conservé. Je l'utilise depuis un certain temps et les listes de répertoires, même dans les grands répertoires, sont beaucoup plus rapides que sans le travail cron ci-dessus, bien que je ne puisse pas citer de chiffres exacts.

un CVn
la source
1
Si vous allez réinventer la roue, vous pourriez aussi bien utiliser locate, qui vient avec la updatedbmise à jour d'une base de données de localisation: en.wikipedia.org/wiki/Locate_(Unix)
laebshade
@laebshade Je n'utilise pas locatedu tout, mais j'utilise lsbeaucoup. Et de temps en temps find. (En outre, find et ls sont les commandes spécifiques à propos desquelles l'OP demande.) Le point d'utilisation findici est qu'il itère sur tout ce qui est stocké en appelant stat (), donc le noyau doit charger les métadonnées en mémoire. Une fois qu'il est là, c'est comme s'il était stocké lors d'un redémarrage.
un CVn le