101 votes

Mise en cache/préchargement de fichiers sur Linux dans la RAM

J'ai un serveur plutôt vieux qui a 4 Go de RAM et qui sert essentiellement les mêmes fichiers toute la journée, mais il le fait à partir du disque dur alors que 3 Go de RAM sont "libres".

Toute personne ayant déjà essayé d'exécuter un disque RAM peut témoigner que c'est génial en termes de vitesse. L'utilisation de mémoire de ce système n'est généralement jamais supérieure à 1 Go/4 Go, donc je veux savoir s'il y a un moyen d'utiliser cette mémoire supplémentaire pour quelque chose de bon.

  • Est-il possible de demander au système de fichiers de toujours servir certains fichiers à partir de la RAM?
  • Existe-t-il d'autres méthodes que je peux utiliser pour améliorer les capacités de lecture de fichiers en utilisant la RAM?

Plus spécifiquement, je ne cherche pas un 'hack' ici. Je veux que les appels au système de fichiers servent les fichiers à partir de la RAM sans avoir besoin de créer un disque RAM et de copier les fichiers manuellement. Ou du moins un script qui le fait pour moi.

Les applications possibles ici sont :

  • Serveurs Web avec des fichiers statiques qui sont souvent lus.
  • Serveurs d'application avec de grandes bibliothèques.
  • Ordinateurs de bureau avec trop de RAM.

Des idées?

Édition :

  • Très informatif : La cache Linux et pdflush
  • Comme l'a souligné Zan, la mémoire n'est pas vraiment libre. Ce que je veux dire, c'est qu'elle n'est pas utilisée par les applications et je veux contrôler ce qui doit être mis en cache en mémoire.

1 votes

Je cherche également quelque chose dans ce sens. Je ne pense pas que la mise en cache générale des blocs de disque du système de fichiers soit la réponse. Supposons que je veuille que le bloc de disque X soit toujours mis en cache. Quelque chose y accède, et le noyau le met en cache. Jusque-là tout va bien, mais le processus suivant veut le bloc Y, donc le noyau abandonne mon bloc X et met en cache Y à la place. Le prochain processus qui veut X devra attendre qu'il soit retiré du disque; c'est ce que je veux éviter. Ce que je voudrais (et ce que je pense que le message original cherche aussi) est de superposer un cache à écriture automatique sur un système de fichiers qui garantira que les fichiers sont toujours

2 votes

Étant donné que le consensus semble être que Linux devrait déjà mettre en cache les fichiers fréquemment utilisés pour vous, je me demande si vous avez effectivement réussi à apporter des améliorations en suivant les conseils trouvés ici. Il me semble que tenter de contrôler manuellement le cache pourrait être utile pour chauffer le cache, mais qu'avec le schéma d'utilisation que vous décrivez ("servir les mêmes fichiers toute la journée"), cela ne serait pas d'une grande aide pour un serveur déjà chauffé, ou pas du tout.

0 votes

Vous dites que vous ne cherchez pas un hack, mais Linux fait déjà ce que vous voulez faire par défaut. L'équation suivante : "servir les mêmes fichiers toute la journée" + "dire au système de fichiers de toujours servir certains fichiers depuis la RAM" équivaut à un "hack" par définition. Avez-vous réellement remarqué des améliorations de performances ? D'après mon expérience, Linux met en cache vos lectures du système de fichiers.

-1voto

J'ai juste essayé dd if=/dev/yourrootpartition of=/dev/null \ bs=1Mcount=howmuchmemoryyouwanttofill

cela ne me donne pas le contrôle que vous désirez mais cela essaie au moins d'utiliser la mémoire gaspillée

-1voto

Arsalan Ansari Points 31

J'utilise find / -name stringofrandomcharacter Cela aide beaucoup

0 votes

Notez que cela ne pré-cache pas le contenu du fichier, seulement les métadonnées du système de fichiers. Une astuce utile si vous avez beaucoup de fichiers que vous prévoyez de vérifier, mais pas vraiment pertinent pour la question originale. De plus, juste find / > /dev/null 2>&1 fera le même travail avec légèrement moins d'utilisation du CPU.

-1voto

qu1j0t3 Points 311

Parfois, je peux vouloir mettre en cache des fichiers dans un certain dossier et ses sous-dossiers. Je vais simplement dans ce dossier et j'exécute ce qui suit :

find . -exec cp {} /dev/null \;

Et ces fichiers sont mis en cache

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X