Si j'appelle chat / dev / null deux fois de suite sur un fichier, le deuxième appel sera-t-il un non-OP?
Question
Je veux utiliser cat filepath > /dev/null
comme mécanisme de mise en cache de mémoire bon marché.
Ce que je m'interroge sur est: Si je l'appelle une seconde fois, et le fichier
est déjà dans le cache de disque, est-ce que le système d'exploitation est assez intelligent pour ne rien faire?
mise à jour: j'ai testé cela sur un volume CIFS, à l'aide de fadvise posix_fadv_willneed mettre en cache le fichier localement (à l'aide de Linux-fools sur la ligne de commande).S'avère que Le volume doit être monté en mode lecture-écriture pour que cela fonctionne.En lecture seule mode, la fadvise semble être ignorée.Cela doit avoir quelque chose à voir avec la samba Mécanisme OPLOCK.
La solution
Il est préférable de POSIX_FADVISE (..., POSIX_FADV_WILLNEED) que pour CAT Le fichier à / dev / null - il nécessite moins d'IO réelle et n'a pas besoin du contenu du fichier à lire dans les utilisateursPace Ram, détruire les caches CPU.
De plus, si la partie pertinente du fichier est déjà dans le cache, le POSIX_FADVISE fait pratiquement beaucoup moins de travail que le fichier CAT> / dev / null
Si vous sentez que vous avez vraiment besoin que vous avez vraiment besoin que les pages soient
En général, ce genre de chose est une pessimisation et doit être évité, cependant.Forcer le noyau à se comporter de la manière dont vous voulez peut réduire sa capacité à optimiser la charge de travail réelle tout à l'heure.
Autres conseils
Non, et il ne peut pas.
déterminer si un programme ne fera que rien n'est généralement plus complexe que de simplement l'exécuter.
Pourquoi avez-vous besoin de contrôler la mémoire de la mémoire de ma mémoire?Si cela est absolument nécessaire, envisagez d'utiliser un système de fichiers TMPFS ou en utilisant CompcAche (un périphérique de bloc de RAM compressé)
Cela ne fera pas rien , car les autres réponses ont dit.Mais si ce que vous vraiment signifiait était:
Si je l'appelle une seconde fois, et le Le fichier est déjà dans le cache de disque, est le système d'exploitation assez intelligent pour
pas le lire du disque une seconde fois?
... alors la réponse est oui 1 .C'est ainsi que le cache de disque fonctionne, après tout.
1.Tant que le système de fichiers en question utilise le cache de page, de toute façon.
It will be fast as hell, but it won't be a no-op (if it were, there would be legit reasons for syscalls to do unexpected things instead of their promised functions...). However, depending on the filesystem driver used, and the kernel options, you could be running close to the memory bandwidth.