J'ai besoin de configurer un système de stockage en mémoire pour environ 10 Go de données, composé de nombreux fichiers uniques de 100 ko (images). Il y aura beaucoup de lectures et d'écritures assez périodiques (ajout de nouveaux fichiers, suppression de certains anciens).
Maintenant, je sais que tmpfs se comporte comme un système de fichiers normal pour lequel vous pouvez, par exemple, vérifier l'espace libre/utilisé avec df , qui est une fonctionnalité intéressante à avoir. Cependant, je suis intéressé si ramfs offrirait certains avantages en ce qui concerne la vitesse des opérations IO. Je sais que je ne peux pas contrôler la taille de la mémoire consommée lors de l'utilisation de - ramfs et que mon système peut se bloquer s'il consomme complètement la RAM libre, mais ce ne sera pas un problème dans ce scénario.
Pour résumer, je suis intéressé:
- Côté performances, ce qui est plus rapide: ramfs ou tmpfs (et peut-être pourquoi)?
- Quand tmpfs utilise-t-il l'espace d'échange? Déplace-t-il les données déjà enregistrées pour les échanger (pour libérer RAM pour les autres programmes en cours d'exécution) ou uniquement de nouvelles données si à ce moment il n'y a pas de libre RAM gauche ?
Ma recommandation:
Mesurer et observer l'activité réelle dans des conditions normales.
Il est peu probable que ces fichiers soient TOUS nécessaires et servis à partir du cache à tout moment. Mais il y a un outil sympa appelé vmtouch qui peut vous dire ce qui est en cache à un moment donné. Vous pouvez également l'utiliser pour verrouiller certains répertoires ou fichiers dans le cache. Alors voyez à quoi ressemblent les choses après une utilisation régulière. L'utilisation de tmpfs et ramfs n'est pas nécessaire dans cette situation.
Voir: http://hoytech.com/vmtouch/
Je pense que vous serez surpris de voir que les fichiers les plus actifs résideront probablement déjà dans le cache.
En ce qui concerne tmpfs et ramfs, il n'y a pas de différence de performance appréciable. Il existe des différences opérationnelles. Un cas d'utilisation réel est Oracle, où ramfs a été utilisé pour permettre à Oracle de gérer les données dans RAM sans risque de les échanger. Les données tmpfs peuvent être échangées sous la pression de la mémoire. sont également des différences dans le redimensionnement et la modification des paramètres à la volée.
Ne pensez pas trop à cela. Mettez suffisamment RAM dans votre système et laissez le cache disque du noyau prendre soin des choses pour vous. De cette façon, vous bénéficiez de lectures provenant directement de la mémoire, tout en étant capable de conserver les données sur le disque .
1) Référence de performance.
En utilisant cette page comme référence, j'ai fait une comparaison d'E/S entre tmpfs et ramfs, et les résultats sont quasiment identiques en termes de performances:
# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)
# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s
# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s
# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s
# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s
2) Selon cette page , tmpfs utilise swap et ramfs n'utilise pas swap.
Si vous disposez d'une quantité suffisante de RAM installée pour héberger les différents tampons du noyau, la pile et les tas d'applications, le cache du système de fichiers normal et tous les fichiers que vous avez l'intention d'y mettre, ramfs
ne devrait jamais être plus lent que tmpfs
car il n'y aura aucun risque d'E/S physiques par conception. Les E/S physiques sont sans aucun doute la principale cause de dégradation des performances dans ce domaine.
Cependant, si vous n'avez pas cette quantité de RAM installé, utiliser ramfs
pourrait et sera probablement plus lent que tmpfs
car ce dernier utilise l'heuristique de mémoire virtuelle pour décider ce qui devrait être mieux sur le disque (c'est-à-dire dans la zone de swap) vs ce qui devrait être sur RAM tandis qu'avec tmpfs
, vos données de système de fichiers sont bloquées sur RAM ce qui pourrait être un gaspillage de ressources.
Pour répondre à votre deuxième question, oui, tmpfs
déplacera d'abord les anciennes données vers la zone de swap, pas la dernière "chaude".