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.

0voto

Quant à votre question précédente, assurez-vous que votre RAM est installée sur des canaux mémoire différents afin que le processeur puisse récupérer les données en parallèle.

0voto

Kyle Brandt Points 81077

Je pense que cela pourrait être mieux résolu au niveau de l'application. Par exemple, il existe probablement des serveurs web spécialisés pour cela, ou vous pourriez envisager mod_cache avec Apache. Si vous avez un objectif spécifique, comme servir du contenu web plus rapidement, alors vous pouvez obtenir des améliorations à partir de ce genre de chose, je pense.

Mais votre question est d'ordre général, le sous-système mémoire Linux est conçu pour fournir la meilleur utilisation générale de la RAM. Si vous souhaitez cibler certains types de performances, envisagez de tout examiner dans /proc/sys/vm.

Le package fcoretools est intéressant, je serais intéressé par tout article sur son application... Ce lien parle des appels système réels utilisés dans une application.

1 votes

Trouver /var/lib/mysql | xargs fadvise -willneed (sale, mais cela devrait fournir un accès plus rapide aux fichiers de la base de données; à titre d'exemple)

0 votes

Très bon hack, mais un tel hack ne supprime pas beaucoup d'attentes fsync de mysql :( les fsyncs sont nécessaires pour garantir l'ACID (Atomicité, Cohérence, Isolation, Durabilité).

0voto

Joshua Dance Points 1695

Les ordinateurs de bureau (par exemple ubuntu) utilisent déjà le préchargement des fichiers (du moins, des bibliothèques partagées populaires) en mémoire au démarrage. Cela est utilisé pour accélérer le démarrage et le temps de démarrage de différents logiciels gonflés comme FF, OO, KDE et GNOME (avec son client de messagerie gonflé, Evolution).

L'outil est nommé readahead http://packages.ubuntu.com/dapper/admin/readahead

Il existe également un appel système correspondant: readahead(2) http://linux.die.net/man/2/readahead

Il existe également un projet de démon de préchargement: http://linux.die.net/man/8/preload

0voto

Justin Points 3736

http://www.coker.com.au/memlockd/ le fait

bien que vous n'en ayez pas vraiment besoin, Linux se chargera assez bien de mettre en cache les fichiers que vous utilisez de lui-même.

0voto

Federico Points 111

Pas exactement ce qui a été demandé, mais j'utilise

trouver BASE_DIRECTORY -type f -exec cat {} >/dev/null \;

pour déclencher l'initialisation des fichiers dans un volume AWS créé à partir d'un instantané. C'est plus ciblé que la recommandation officielle d'utiliser dd si vous voulez simplement lire quelques fichiers.

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