Il semble que la première fois que j'exécute find
ou ls
sur 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?
Réponses:
Vous pouvez utiliser vmtouch pour ajouter des fichiers à votre cache de pages (cache disque).
Mettez
nohup vmtouch -dl <files or directories> &
votre/etc/rc.local
fichier 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'-t
indicateur au lieu des-ld
indicateurs.Pour plus d'informations sur le cache de pages, regardez ici , ici et sur wikipedia .
la source
build-essential
paquet. Téléchargezvmtouch.c
. Exécutezgcc -O2 -o vmtouch vmtouch.c
oumake vmtouch
et vous obtenez le binairevmtouch
que vous pouvez ensuite copier/usr/local/bin
ou appeler par exemple./vmotouch
.vmtouch
d'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."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-cache
et mettez-y les éléments suivants:Cela utilise
nice
etionice
(qui devrait être installé par défaut, et certainement disponible via le gestionnaire de paquets; Debian les place danscoreutils
etutil-linux
, respectivement) pour réduire la priorité dufind
processus 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.find
lui-même passera parstat()
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.
la source
locate
, qui vient avec laupdatedb
mise à jour d'une base de données de localisation: en.wikipedia.org/wiki/Locate_(Unix)locate
du tout, mais j'utilisels
beaucoup. Et de temps en tempsfind
. (En outre, find et ls sont les commandes spécifiques à propos desquelles l'OP demande.) Le point d'utilisationfind
ici 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.