Conserver un fichier dans le tampon de blocage du système d'exploitation
-
02-07-2019 - |
Question
Je dois conserver autant que possible un fichier volumineux dans le cache de blocs du système d'exploitation, même s'il est plus volumineux que je ne peux le ranger, et je lis continuellement un autre fichier très volumineux. ATM, je vais supprimer une grande partie du fichier important de la mémoire cache du système lorsque je diffuse un autre fichier.
La solution
Sur un système POSIX tel que Linux ou Solaris, essayez d'utiliser posix_fadvise.
Dans le fichier en streaming, procédez comme suit:
posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
bytes = pread(fd, buffer, 64 * 1024, current_pos);
current_pos += 64 * 1024;
posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}
Et vous pouvez appliquer POSIX_FADV_WILLNEED à votre autre fichier, ce qui devrait augmenter sa priorité de mémoire.
Maintenant, je sais que Windows Vista et Server 2008 peuvent également effectuer des astuces astucieuses avec des priorités de mémoire. Les anciennes versions comme XP peuvent probablement faire plus d’astuces de base. Mais je ne connais pas les fonctions par cœur et je n’ai pas le temps de les regarder.
Autres conseils
Sous Linux, vous pouvez monter un système de fichiers sous le type tmpfs , qui utilise la mémoire d'échange disponible comme sauvegarde si nécessaire. Vous devriez être en mesure de créer un système de fichiers supérieur à la taille de votre mémoire, ce qui donnera la priorité au contenu de ce système de fichiers dans le cache système.
mount -t tmpfs none /mnt/point
Voir: http://lxr.linux.no/linux/Documentation /filesystems/tmpfs.txt
Vous pouvez également bénéficier des fichiers swapiness
et drop_cache
dans / proc / sys / vm
Si vous utilisez Windows, envisagez d'ouvrir le fichier que vous parcourez avec l'indicateur
.FILE_FLAG_SEQUENTIAL_SCAN
Vous pouvez également utiliser
FILE_FLAG_NO_BUFFERING
pour ce fichier, mais il impose certaines restrictions sur la taille de lecture et l'alignement de la mémoire tampon.
Certains systèmes d'exploitation ont des disques virtuels que vous pouvez utiliser pour réserver un segment de mémoire vive pour le stockage, puis le monter en tant que système de fichiers.
Ce que je ne comprends pas, c’est pourquoi vous voulez empêcher le système d’exploitation de mettre en cache le fichier. Votre question n’a pas vraiment de sens pour moi.
Achetez plus de RAM (c’est relativement bon marché!) ou laissez l’OS faire son travail. Je pense que vous constaterez que contourner le système d’exploitation va poser plus de problèmes que cela ne vaut la peine. Le système d'exploitation mettra en cache autant de fichiers que nécessaire, jusqu'à ce que votre application ou toute autre application ait besoin de mémoire.
Je pense que vous pourriez réduire le nombre de processus, mais il est probablement plus rapide d'acheter plus de mémoire.
mlock () et mlockall () verrouillent respectivement tout ou partie de l'espace d'adressage virtuel du processus appelant dans la RAM, empêchant ainsi la pagination de cette mémoire dans la zone d'échange.
(copié depuis la page de manuel Linux de MLOCK (2))