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.

Était-ce utile?

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))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top