J'ai un serveur plutôt ancien qui a 4 Go de RAM et qui sert à peu près les mêmes fichiers toute la journée, mais il le fait depuis le disque dur alors que 3 Go de RAM sont "libres".
Quiconque a déjà essayé de faire fonctionner un lecteur RAM peut en témoigner. C'est impressionnant en termes de vitesse. L'utilisation de la mémoire de ce système n'est généralement jamais supérieure à 1 Go / 4 Go. Par conséquent, je souhaite savoir s'il existe un moyen d'utiliser cette mémoire supplémentaire à des fins utiles.
- Est-il possible de dire au système de fichiers de toujours servir certains fichiers en dehors de la RAM?
- Existe-t-il d'autres méthodes que je peux utiliser pour améliorer les capacités de lecture de fichiers à l'aide de la RAM?
Plus précisément, je ne cherche pas un «hack» ici. Je veux que les appels de système de fichiers servent les fichiers de la RAM sans avoir à créer un lecteur de disque dur et à y copier les fichiers manuellement. Ou au moins un script qui fait cela pour moi.
Les applications possibles sont:
- Serveurs Web avec des fichiers statiques lus beaucoup
- Serveurs d'applications avec de grandes bibliothèques
- Ordinateurs de bureau avec trop de RAM
Des idées?
Modifier:
- J'ai trouvé cela très informatif: Le cache de pages Linux et pdflush
- Comme l'a souligné Zan, la mémoire n'est pas réellement libre. Ce que je veux dire, c'est qu'il n'est pas utilisé par les applications et je veux contrôler ce qui doit être mis en cache dans la mémoire.
la source
Réponses:
vmtouch semble être un bon outil pour ce travail.
Points forts:
vmtouch manuel
EDIT: l' utilisation telle qu'elle est demandée dans la question est répertoriée dans l'exemple 5 de vmtouch Hompage
EDIT2: Comme indiqué dans les commentaires, un référentiel git est maintenant disponible.
la source
vmtouch
correspond bien à cette niche.Ceci est également possible en utilisant la vmtouch Toucher de la mémoire virtuelle utilitaire .
L'outil vous permet de contrôler le cache du système de fichiers sur un système Linux. Vous pouvez forcer ou verrouiller un fichier ou un répertoire spécifique dans le sous-système de cache de la VM, ou l'utiliser pour vérifier quelles parties d'un fichier / répertoire sont contenues dans la VM.
Ou...
la source
L'astuce du pauvre pour obtenir des éléments dans le cache du système de fichiers consiste simplement à le modifier et à le rediriger vers / dev / null.
la source
cat
s le fichier vers / dev / null périodiquementLinux mettra en cache autant d’IO de disque en mémoire que possible. C’est ce que sont les statistiques de cache et de mémoire tampon. Cela fera probablement un meilleur travail que de stocker les bonnes choses.
Cependant, si vous insistez pour stocker vos données en mémoire, vous pouvez créer un lecteur RAM à l'aide de tmpfs ou de ramfs. La différence est que ramfs allouera toute la mémoire que vous demandez, car tmpfs n'utilisera que la mémoire utilisée par votre périphérique block. Ma mémoire est un peu rouillée, mais vous devriez pouvoir faire:
ou
puis copiez vos données dans le répertoire. De toute évidence, lorsque vous éteignez la machine ou démontez cette partition, vos données seront perdues.
la source
Après quelques lectures approfondies sur les fonctionnalités de permutation de noyau et de mise en cache de noyau 2.6, j'ai trouvé «fcoretools». Qui se compose de deux outils;
(Si quelqu'un trouve ça intéressant, je poste ça ici)
la source
Deux paramètres du noyau peuvent considérablement aider même sans utiliser d’autres outils:
swappiness
indique au noyau Linux à quel point il doit utiliser swap de manière agressive. Citant l'article de Wikipedia:
vfs_cache_pressure
Citant de vm.txt :
En réglant
swappiness
high (comme 100), le noyau déplace tout ce qu’il n’a pas besoin d’échanger, libérant ainsi de la RAM pour la mise en cache des fichiers. Et en réglantvfs_cache_pressure
low (disons 50, pas 0!), Cela favorisera la mise en cache des fichiers plutôt que de conserver les données de l'application dans la RAM.(Je travaille sur un projet Java volumineux et chaque fois que je l’exécutais, cela prenait beaucoup de mémoire vive et effaçait le cache disque. Ainsi, lors de la compilation suivante du projet, tout était à nouveau lu à partir du disque. En ajustant ces deux paramètres, je gère conserver les sources et la sortie compilée en mémoire cache, ce qui accélère considérablement le processus.)
la source
Je doute fort qu'il serve en fait des fichiers à partir du disque avec 3 Go de RAM disponible. La mise en cache de fichiers Linux est très bonne.
Si vous voyez des E / S de disque, je consulterais vos configurations de journalisation. De nombreux journaux sont définis comme non tamponnés, afin de garantir que les dernières informations de journal sont disponibles en cas de blocage. Indépendamment des systèmes qui doivent être rapides, utilisez l’entrée d’écriture du journal en mémoire tampon ou un serveur de journal distant.
la source
Si vous avez beaucoup de mémoire, vous pouvez simplement lire les fichiers que vous souhaitez mettre en cache avec cat ou similaire. Linux fera alors du bon travail pour le garder.
la source
Vous pourrez peut-être avoir un programme qui stocke simplement
mmap
vos fichiers, puis reste actif.la source
Il existe différents systèmes ramfs que vous pouvez utiliser (par exemple, ramfs, tmpfs), mais en général, si les fichiers sont lus souvent, ils se trouvent dans le cache de votre système de fichiers. Si votre ensemble de fichiers de travail est plus volumineux que votre RAM libre, les fichiers en seront effacés - mais si votre ensemble de travail est plus grand que votre RAM libre, vous ne pourrez pas l'intégrer dans un disque mémoire.
Vérifiez le résultat de la commande "free" dans un shell - la valeur de la dernière colonne, sous "Cached", représente la quantité de mémoire RAM utilisée pour le cache du système de fichiers.
la source
En ce qui concerne votre dernière question, assurez-vous que votre RAM est installée sur différents canaux de mémoire afin que le processeur puisse extraire les données en parallèle.
la source
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 pouvez envisager mod_cache avec Apache. Si vous avez un objectif spécifique, tel que la fourniture de contenu Web plus rapidement, vous pouvez obtenir des améliorations de ce type, je pense.
Mais votre question est de nature générale, le sous-système de mémoire Linux est conçu pour fournir la meilleure utilisation générale de la mémoire RAM. Si vous souhaitez cibler certains types de performances, envisagez de tout rechercher dans / proc / sys / vm.
Le paquetage fcoretools est intéressant, je serais intéressé par tous les articles sur son application ... Ce lien parle des appels système réellement utilisés dans une application.
la source
Les ordinateurs de bureau (par exemple, ubuntu) utilisent déjà des fichiers de préchargement (au moins, des bibliothèques partagées populaires) dans la mémoire au démarrage. Il est utilisé pour accélérer le démarrage et le temps de démarrage de différents logiciels tels que FF, OO, KDE et GNOME (avec evolution bloat-mailer).
Cet outil s'appelle 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
la source
http://www.coker.com.au/memlockd/ fait cela
bien que vous n'en ayez vraiment pas besoin, linux mettra assez bien en cache les fichiers que vous utilisez.
la source
je viens d'essayer dd si = / dev / votre partition de racine de = / dev / null \ bs = 1Mcount = combien de fois vous avez perdu
il ne me donne pas le contrôle que vous désirez mais il essaie au moins d'utiliser une mémoire perdue
la source
J'utilise find / nom stringofrandomcharacter ça aide beaucoup
la source
Pas exactement ce qui a été demandé, mais j'utilise
déclencher l'initialisation des fichiers d'un volume AWS créé à partir d'un instantané. C'est plus ciblé que la recommandation officielle d'utiliser dd si vous voulez juste lire certains fichiers.
la source
Parfois, il se peut que je veuille mettre en cache des fichiers d’un certain dossier et de ses sous-dossiers. Je vais juste dans ce dossier et exécute ce qui suit:
trouver . -exec cp {} / dev / null \;
Et ces fichiers sont mis en cache
la source