Vous utilisez tmpfs + une très grande partition de swap pour / tmp au lieu d'un système de fichiers normal?

8

J'ai un serveur Linux et j'ai une partition de disque de 500 Go de rechange. Je voulais le formater et l'utiliser pour / tmp. Le serveur exécute parfois de grandes tâches de traitement des données, il peut donc arriver que / tmp contienne des Go de données temporaires.

Ensuite, j'ai eu l'idée qu'à la place je pourrais l'ajouter en tant que partition de swap et monter / tmp sur tmpfs. Cette idée est-elle raisonnable?

Le serveur a 6 Go de RAM, donc dans la plupart des cas, les données sur / tmp ne seront que dans la RAM, avec l'avantage évident de la vitesse. La question est, et s'il y aura, disons, 10 à 20 Go de données sur / tmp, comment le système fonctionnera-t-il? Quelles seraient les performances par rapport au simple montage / tmp sur une partition ext4? Merci pour l'aide.

Edit: Il est clair que le système commencera à échanger de la mémoire lorsque l'utilisation de tmpfs atteint la limite de RAM. Mais Linux est-il suffisamment intelligent pour échanger des données tmpfs et conserver des données "régulières" dans la RAM? Si oui, alors je suppose que cela pourrait se comporter raisonnablement. Sinon, l'ensemble du système sera gravement touché.

Petr Pudlák
la source
N'oubliez pas Zram.
Ken Sharp

Réponses:

12

Ce n'est PAS une bonne idée TM .

Vous irez bien avec une grande /tmppartition, montée comme ça (à partir de votre /etc/fstab)

tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0

Et vous pouvez ajouter votre disque externe en tant que partition d'échange géante

/dev/sdb1  swap  swap  defaults  0 0

Lorsque cela atteint sa limite, votre machine commencera à échanger les pages de la RAM vers le disque - à ce moment, les moyennes de charge passeront par le toit et la machine s'arrêtera.

C'est une mauvaise idée de s'appuyer sur SWAP de quelque façon que ce soit, vous feriez mieux de vendre votre disque de 500 Go et d'acheter simplement plus de RAM - c'est pas cher.

En résumé

Si vous voulez vraiment utiliser votre disque de 500 Go, vous pouvez monter votre disque de 500 Go /tmpavec un système de fichiers non journalisé avec atime et diratime désactivés (par exemple ext2). Ce serait beaucoup plus rapide que de traiter avec une machine qui est SWAPing

Fran
la source
1
C'est une TERRIBLE idée. Utiliser tmpfs et compter dessus pour être poussé à permuter sonne comme une idée ... mais la réalité est que votre système peut pousser les mauvaises choses à permuter en faveur du maintien de tmpfs dans la RAM physique. Vous feriez mieux de simplement monter votre partition de 500 Go sur / tmp et d'en finir avec. Je suggère d'utiliser un système de fichiers extrêmement léger comme xfs de riserfs ... car vous pouvez le reformater rapidement au démarrage ou chaque fois que le besoin s'en fait sentir ... et vous n'avez vraiment pas besoin de toutes les fonctionnalités avancées de ext2 / 3/4 et autres.
TheCompWiz
3
Pourquoi le downvote? Je ne tolérais pas cette action - mais je fournissais un moyen de le faire. La question était de savoir si c'était possible et comment s'y prendre - pas si c'était une bonne idée ou non. J'avais explicitement déclaré qu'il s'agissait d'une mauvaise idée - et que la solution réelle devrait simplement être d'acheter plus de RAM s'il avait besoin d'un tmpaccès plus rapide .
Fran
1
C'est un endroit pour de bonnes idées ... pas des solutions de ruban adhésif et de chewing-gum. Les gens viennent ici pour de l'aide ... et non pour des idées sur la façon de faire de leur vie un enfer.
TheCompWiz
J'ai édité ma réponse pour l'adapter à votre commentaire, merci pour votre contribution
Fran
3
Tout le monde ici semble d'accord pour dire que c'est une mauvaise idée. Cependant, le tmpfs.txt de la documentation du noyau le répertorie comme l'un des cas d'utilisation de tmpfs. @Fran, avez-vous des données pour étayer votre affirmation effrayante selon laquelle cela provoquerait une raclée? Évidemment, cela dépend de ce qui se passera / tmp.
migle
1

Cela pourrait être une idée raisonnable.

Mettre un système de fichiers réel sur / tmp entraîne des frais généraux, car les systèmes de fichiers parcourent de grandes longueurs pour s'assurer que les données sur le disque ne sont pas corrompues en cas de défaillance du système. Pour un / tmp qui est nettoyé au démarrage, c'est évidemment juste une surcharge. L'utilisation d'un tmpfs éviterait cette surcharge.

D'un autre côté, les systèmes de fichiers s'assurent également que les fichiers sont organisés sur le disque de manière à optimiser le temps d'accès - c'est-à-dire qu'ils éviteront la fragmentation. Les accès séquentiels classiques aux fichiers entraîneront (principalement) des accès séquentiels aux disques, qui sont plus efficaces que les accès aléatoires. Cet effet est plus prononcé sur les disques durs en rotation que sur les SSD. La combinaison swap + tmpfs ne peut pas facilement faire cela, car swap ne sait pas quel morceau de mémoire appartient à quel fichier et tmpfs ne sait pas comment les pages sont mappées à la mémoire physique ou au disque. Pour les gros fichiers, cependant, cela devrait bien fonctionner, car tmpfs et swap essaient de garder les choses contiguës dans ce cas. Du moins, tant qu'il y a beaucoup d'espace libre sur le swap (sinon la fragmentation se déclenche), et les écritures se produisent assez lentement pour avoir une chance d'être swappées.

Donc, l'essentiel est: cela dépend, vous devriez essayer les deux options pour voir laquelle fonctionne le mieux.

Lorsque vous montez les tmpfs, n'oubliez pas de définir explicitement la taille. La valeur par défaut est la moitié de la RAM physique, donc seulement 3 Go.

Arnout
la source
- la réponse raisonnable (qui est ironiquement beaucoup plus profonde que l'autre)
poige
1

C'est en fait une bonne idée lorsque vous n'avez généralement pas beaucoup de données /tmp, mais consommez occasionnellement des gigaoctets sans fin pour une durée limitée. Le problème est que le système d'échange Linux ne connaît pas suffisamment votre cas d'utilisation pour le faire correctement. Il donnera généralement la priorité au dumping ou à l'échange de cache sur les pages du programme, mais cela n'aide pas vraiment. Il peut être possible d'utiliser des groupes de contrôle pour atteindre votre objectif, c'est lorsque les données de travail sont conservées dans la mémoire du programme, mais je ne sais pas comment configurer les groupes de contrôle dans ce cas (je suppose que vous pourriez utiliser un tmpfs FUSE ...) . Heureusement, ce n'est pas obligatoire. Vous pouvez obtenir le comportement souhaité avec zram et un support.

zram-initest le programme qui automatise la configuration de zram, qui est un périphérique de bloc RAM compressé. Il y a généralement un exemple dans la zram-initconfiguration pour le montage en /tmptant que zram. Ce sera quelque chose comme ce qui suit

type0=/tmp
flag0= 
size0=524288 # 500G of logical space
mlim0=2G # 2G of memory
back0=/dev/loop0 # (or /dev/sdxN, your large slow drive)
notr0= 
maxs0=4 # maximum number of parallel processes for this device
algo0=zstd 
labl0=tmp # the label name
uuid0= 
args0= 

Cela compressera et stockera en mémoire tout ce qui est écrit dans / tmp. La compression habituelle se situe autour de 50%. Il consommera au maximum 2G de mémoire physique. S'il manque de mémoire physique, il prendra les fichiers les plus anciens et les poussera dans le périphérique de sauvegarde, toujours compressé. Notez qu'il engendre une surcharge du processeur pour compresser et décompresser les fichiers, mais cela est généralement compensé par la réduction des E / S.

Une configuration similaire peut être utilisée conjointement avec des groupes de contrôle pour permettre à certains processus de s'échanger sans nuire aux performances globales du système.

Perkins
la source