Différence de performances entre ramfs et tmpfs

23

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 d'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 , ce qui est une fonctionnalité intéressante. Cependant, je suis intéressé si Ramfs offrirait certains avantages en ce qui concerne la vitesse des opérations d'E / S. 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, qui est plus rapide: ramfs ou tmpfs (et peut-être pourquoi)?
- Quand tmpfs utilise-t-il l'espace d'échange? Déplace-t-il des données déjà enregistrées pour les échanger (pour libérer de la RAM pour d'autres programmes en cours d'exécution) ou uniquement de nouvelles données si à ce moment il n'y a plus de RAM disponible?

Ivan Kovacevic
la source
Euh, combien de RAM est dans le serveur?
ewwhite
1
Le serveur dispose d'un total de 16 Go de RAM. Il convient également de noter que je n'ai pas de stockage SSD mais un seul disque dur à 7200 tr / min. C'est pourquoi j'envisage d'utiliser un certain type de stockage RAM.
Ivan Kovacevic

Réponses:

21

Ma recommandation:

Mesurez et observez 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 existe un bel outil appelé vmtouch qui peut vous dire ce qui est dans le 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 en RAM sans risque de les échanger. les données tmpfs peuvent être échangées sous la pression de la mémoire. Il existe également des différences de redimensionnement et de modification des paramètres à la volée.

ewwhite
la source
1
Super petit utilitaire! +1
Janne Pikkarainen
1
@ewwhite Excellente réponse. Dans l'un de nos cas, il y a quelques années, nous avons en effet découvert que les fichiers principalement utilisés résident déjà dans le cache. Astuce: Les systèmes de fichiers d'aujourd'hui sont beaucoup plus intelligents que celui que je pense.
giannisapi
13

Ne pensez pas trop à cela. Mettez suffisamment de RAM dans votre système et laissez le cache disque du noyau s'occuper de vous. De cette façon, vous bénéficiez de lectures provenant directement de la mémoire, tout en conservant les données sur le disque.

EEAA
la source
1
Mon système dispose actuellement de 16 Go de RAM. C'est une simple installation Debian exécutant Nginx pour servir ces images. J'ai une connexion réseau 1 Gbit qui sera sous 100% de charge tout le temps, servant ces images sans ordre particulier. Pensez-vous que le noyau chargera de toute façon tous ces 10 concerts d'images dans le cache dans ce scénario?
Ivan Kovacevic
3
Oui, s'il y a suffisamment de RAM dans le système et que d'autres applications sur le serveur ne se disputent pas les ressources RAM, ces fichiers resteront dans le cache.
EEAA
2
Je suis dans l'administration Unix depuis environ 15 ans et je n'ai jamais rencontré de situation où tmpfs / ramfs aurait fourni un avantage sur le cache fs du noyau natif. Cela ne veut pas dire que les situations n'existent pas là où elles seraient justifiées, mais elles sont assez rares. En règle générale, si vous avez besoin de cache RAM pour certaines choses, on utilise une couche de mise en cache spécialement conçue (Redis / Memcache / etc.).
EEAA
4
La mise en cache sur disque fonctionnera certainement dans le cas où les images doivent être lues, mais tmpfs ou ramfs pourraient toujours être utiles si vous souhaitez accélérer beaucoup d'écritures aléatoires / petites mais que vous êtes lié à un disque lent avec des E / S aléatoires O. Gardez à l'esprit que si la machine tombe en panne ou subit une panne de courant, le contenu de tmpfs disparaîtra car il était (uniquement) en mémoire.
Martijn
1
@Martijn a raison. tmpfs et ramfs sont en effet utiles. Par exemple, je fais une réécriture intensive (branche de filtre) d'un dépôt git. Le faire en mémoire est plus rapide que le faire sur mon SSD. La mise en cache aide aux lectures et non aux écritures, car (normalement) Linux doit répondre à certaines garanties quant à la permanence des opérations sur disque.
Paul Draper
7

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 qu'elle est à peu près identique 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.

Michael Martinez
la source
2
Votre réponse est sur la bonne voie. Cependant je ne serais pas d'accord avec votre conclusion concernant les performances, vos tests montrent qu'il existe des différences de 0,2 Go / s et 0,1 Go / s en faveur des ramfs. Je crois que cela devrait être testé encore plus loin pour fournir un échantillon statistique valide. Concernant 2) Oui, cela est connu, mais j'aurais souhaité pouvoir mieux comprendre exactement quand le swap est utilisé.
Ivan Kovacevic
si nous avons fait ce benchmark plusieurs fois avec des fichiers de tailles différentes, je ne pense pas que nous verrons une différence. vous remarquerez que lorsque j'ai augmenté la taille quatre fois, la différence s'est en fait rétrécie au lieu de s'élargir.
Michael Martinez
1
Qu'en est-il du cas où vous avez un tas de petits fichiers. Par exemple, écrire des millions de fichiers de 100 à 200 ko. Obtenez-vous également une différence de 0,2 Go / s à plusieurs reprises pour la même taille de fichier? Ce qui indiquerait certainement une différence de performances. Je vais probablement tester cela moi-même quand c'est sur mon horaire. Mais c'est pourquoi j'ai demandé ici, afin que je puisse peut-être le rayer de la liste des tâches si quelqu'un d'autre l'a déjà fait.
Ivan Kovacevic
oui, la seule façon de savoir avec certitude est de faire les tests.
Michael Martinez
1

Si vous avez 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, ramfsne devraient jamais être plus lents que tmpfscar il n'y aura aucun risque de 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ée, l'utilisation ramfspourrait et sera probablement plus lente que tmpfscelle-ci utilisant l'heuristique de mémoire virtuelle pour décider ce qui devrait mieux être sur le disque (c'est-à-dire dans la zone de swap) par rapport à ce qui devrait être sur la RAM tandis qu'avec tmpfs, les données de votre système de fichiers sont bloquées sur la RAM, ce qui pourrait être un gaspillage de ressources.

Pour répondre à votre deuxième question, oui, tmpfsles premières données seront d'abord déplacées vers la zone de swap, pas la dernière "chaude".

jlliagre
la source