Puis-je limiter la taille du cache du file linux?

Je cours Xubuntu 14.04 64 bits, la version 3.8.0-25 de Linux avec 8 Go de RAM.

J'ai un script (dans MATLAB, pour ce que ça vaut) qui charge un grand nombre de files de données (~ 23k) un par un, pour un total d'environ 45G de données. Le problème que je rencontre est qu'après le chargement de chaque file, il rest dans le cache du file. Linux semble préférer garder ces files mis en memory cache plutôt que n'importe quel autre contenu de la memory, ce qui entraîne presque tout le rest forcé dans swap, causant mon système à ralentir à une parsing. Je lis plusieurs files par seconde, donc cela arrive assez rapidement. Je lis seulement chaque file une fois, donc je n'ai pas besoin que les dossiers restnt cachés après que j'ai fini avec eux.

J'ai essayé de désactiver le swap, ce qui fonctionne dans une certaine mesure, mais cela semble une solution médiocre (et il a déjà échoué une fois quand un autre programme a commencé à utiliser une memory excessive). Existe-t-il un moyen de limiter la quantité d'utilisation de la RAM linux pour la caching des files?

Pas vraiment une réponse, mais trop long pour un commentaire.

La memory management de Linux a été soigneusement ajustée sur sa longue durée de vie par des gens très intelligents et il fait normalement un bon travail de prendre la bonne décision en choisissant ce qu'il faut garder en memory et quoi laisser tomber.

Malheureusement, il semble que votre charge de travail ne soit pas très compatible avec ses décisions 🙁 Pourtant, je suis assez surpris de constater que votre rapport préfère souvent forcer la memory sale à échanger plutôt qu'à laisser tomber quelque chose du cache. entre la chute de la chose A du cache et l'abandon de la chose B du cache pourrait être un jeu de hasard mais une décision entre la chute de la chose C du cache par rapport à l'écriture de la memory D corrompue devrait fortement peser vers la chute de la chose C.

Il y a un moyen de conseiller à Linux qu'un morceau de memory cache ne sera pas nécessaire à l'avenir, et c'est l'appel système madvise() avec MADV_DONTNEED mais je pense qu'il serait difficile pour vous d'appeler cet appel système depuis un MATLAB scénario…

En tout cas, je ne pense pas que la réduction de la taille du cache soit vraiment ce que vous voulez faire ici. N'oubliez pas que les files exécutables et les bibliothèques, ainsi que les files d'exécution et les plugins etc … pour MATLAB lui-même, votre script, votre environnement graphique et d'autres logiciels système sont également actifs dans le cache de files. du cache de files (en faveur d'autres contenus du cache de files ou en faveur de la memory de tas et d'autres mappages non sauvegardés par file). Cela fera que votre système deviendra lent aussi sûrement que le permutation.