SWAP (Mémoire virtuelle)

Questions diverses sur la sécurité informatique, la confidentialité, la législation etc.

Re: SWAP (Mémoire virtuelle)

Message par Franck78 » 20 Mars 2012 00:18

Hello,

La seule raison valable que j'ai lue récement sur la taille du swap >= à la RAM est que cela permet (permettrait) de faire un dump complet de la RAM à des fin de debugage.

Donc plutôt inutile en prod. Et comme il est loin le temps ou le mega de ram coutait 1000 francs, exit le swap (eg=200 à 500 Mo) et vive la mémoire vive!


Bye
Franck
Franck78
 
Message(s) : 525
Inscription : 11 Sep 2011 16:04
Localisation : France

Re: SWAP (Mémoire virtuelle)

Message par jdh » 20 Mars 2012 00:45

La taille de swap ?

Avant de discuter, je voudrais revenir sur ce que je sais de l'objectif et du fonctionnement swap.

* objectif du swap :
=> compléter la mémoire en cas de besoin = s'il n'y a pas assez de mémoire vive.
Pourquoi la mémoire vive ne serait pas suffisante ? Parce que les programmes sont dynamiques : ils reçoivent une qté de mémoire, mais peuvent en avoir besoin de plus = ils demandent au système de la mémoire supplémentaire. Par exemple un moteur de base de données peut avoir en cas de charge importante besoin de plus de mémoire, un serveur web en fonction du nombre de requêtes, un tableur qui charge des fichiers avec 10 sur 10 puis avec 2500 sur 20 et avec 12 colonnes calculées, ...

* fonctionnement :
décrit dans le lien wikipedia fourni, en résumé :
- découpage de la mémoire en pages,
- gestionnaire de pages : envoi de pages vers le swap, récupération de pages depuis le swap,
- nécessité d'une stratégie : qui doit aller dans le swap, qui doit revenir, ...

* problèmes :
- le gestionnaire doit interrompre les programmes en attente de chargement ou en écriture,
- la vitesse de la mémoire swap est d'environ 3000 fois moins rapide que la mémoire vive,
- que faire si on sature les deux ?
- comment sizer ? (le problème d'origine)

NB : Le principe du swap existe aussi pour un OS tel Windows !


Le sizing

Historiquement, le swap a été créé quand on disposait de peu de mémoire vive.
Il a de l'intérêt quand on a le besoin : un desktop peu chargé n'a pas ou peu de besoin, un serveur avec un service de BD chargé peut en avoir besoin.
=> un PDP 11/73 qui a servi à créer Unix dispose de 4 Mo de mémoire (oui !)
Au milieu des années 80, on recommande la règle swap= 2x mémoire vive.

Ce qu'il faut considérer, c'est le besoin : sans swap, si on sature la mémoire, bing (en fait non, car il y a des mécanismes pour killer des process !)

Un noyau Linux est facile à imaginer : vmlinuz est la version compressée du noyau, initrd.img contient le minimum en terme de file system, modules, ..., puis il faut charger les modules (non minimum), puis créer des buffers pour tous les disques, cartes réseaux, pilotes, ...
Un noyau Linux 3.0 ça doit tenir en moins de 20 à 30 Mo : des systèmes embarqués peuvent se contenter de 64 Mo avec interfaces web, ...

Donc avec un Linux en 64 bits, avec plus de 4 Go de mémoire (limite 32 bits), a-t-on encore besoin d'un swap ?

Ma réponse est "oui par sécurité" mais limité à quelque chose de raisonnable !

Si je créé un serveur "outils" (amp + quelques applis web + partage samba + bind/dhcp), je vais avoir besoin de 2 Go de mémoire et un cache de 512 Mo est suffisant.
Si je créé un serveur "bd" (mysql ou postgresql pour accès distant), avec 4 Go de mémoire et 1 Go de cache on doit pouvoir travailler sur des bases de ~50 Go voire 100 Go.

Créer un cache de plus d'1 Go me semble avoir peu d'intérêt, parce qu'il en faut du temps pour lire sur un espace d'1 Go.
Lire 32 ko ou 64 ko, on s'en fout, mais lire 700 Mo de données c'est un film divx, et vous connaissez le temps de copie d'un répertoire vers un autre.

Néanmoins, un serveur LSTP est un serveur "terminal" : chaque utilisateur ouvre une session sur le serveur et lance un desktop à la manière de TSE. Donc cela exige de la mémoire qui va être fluctuante avec le nombre de sessions ouvertes et de la charge crée. J'aurais tendance à créer un swap de 2 ou 4 Go pour ne pas crasher : quand le serveur va commencer à ralentir, il utilisera du swap et restera dispo, on pourra faire fermer les utilisateurs correctement car même lent il restera dispo, et ce qui comptera sera que les process ne soient pas killés n'importe comment.
L'intelligence artificielle n'est rien à côté de la stupidité naturelle.
jdh
 
Message(s) : 731
Inscription : 02 Nov 2011 00:36
Localisation : Nantes - Angers

Re: SWAP (Mémoire virtuelle)

Message par Franck78 » 20 Mars 2012 01:45

A l'heure de la barette de 16 ou 64 Go, la question de l'utilité d'un swap <1Go ne se pose plus. Il ne sert à rien.
Passer de 16 à 17Go ou 64 à 65Go ne change rien.

On a vu que c'est trop lent pour être efficace (au dessus de 1Go).

Si ton système de 16+1Go se met à swapper sur 1Go, c'est qu'il y a un problème (ailleurs que la taille du swap). Manque de RAM et la seule solution est doubler/quadrupler/plus et c'est extrèment loin d'un Go de disque supplémentaire.

En gros le temps d'accès n'a pas changé en vingt ans tandis que la quantité d'espace à fournir pour la solution a été multipliée par 1000 ou 10000. Système avec 10Mo de RAM passé a 100Go de RAM.
Franck78
 
Message(s) : 525
Inscription : 11 Sep 2011 16:04
Localisation : France

Re: SWAP (Mémoire virtuelle)

Message par jdh » 20 Mars 2012 10:47

Des barrettes 64 Go ? J'ai vu des 8 Go (un host avec 12 fois 8 Go = 96 Go !) mais pas encore des 16, 32 ou 64 Go.

En cas de saturation mémoire, il y a, sous Linux, un process qui va killer "au hasard".
Imaginez un serveur web qui "kill" Apache !

Passer sur du swap ralentit considérablement : cela doit permettre, pour un admin attentif, de "reprendre le contrôle" avant d'atteindre le "kill".
Pour un serveur réellement "dynamique" (genre LSTP), il faut garder du swap.
Mais pour un desktop ou un serveur qui restera dans la mémoire qu'on lui attribue, le swap est assez inutile.
(Encore que la taille des disques étant telle, 1 ou 2 G de moins ne se verront pas).

Finalement, le swap c'est 1 Go, pour une sécurité. Mais ce n'est plus en rapport avec la mémoire, du fait qu'on peut avoir presque ce qu'on veut.
L'intelligence artificielle n'est rien à côté de la stupidité naturelle.
jdh
 
Message(s) : 731
Inscription : 02 Nov 2011 00:36
Localisation : Nantes - Angers

Re: SWAP (Mémoire virtuelle)

Message par philippe_PMA » 20 Mars 2012 22:37

Juste pour être complet, bien que pour un serveur ce n'est pas très utile, si l'on veut faire de l'hibernation il faut un SWAP au moins de la taille de la RAM disponible.
philippe_PMA
 
Message(s) : 19
Inscription : 01 Nov 2011 23:39

Re: SWAP (Mémoire virtuelle)

Message par sibsib » 20 Mars 2012 23:53

Bonsoir,

Déjà, les barrettes de 16 Go, j'en ai vu pas mal dans nos ESXi à 256 Go :-) Les 32, uniquement sur catalogue (vu le prix !)

Pour la taille de swap, En pleine réflexion effectivement, 1 Go de swap c'est assez énorme, mais ne pas oublier que les Unix/Linux n'hésitent pas à swapper des process dormants pour être sûrs d'avoir toujours de la RAM dispos. Et comme Linux bufferise tant qu'il y a de la RAM... Je pense que sur un serveur Linux tournant suffisamment longtemps, quelle que soit la quantité de RAM, on trouvera quelques process swappés.
Disons que sur une machine à partir de 8 Go de RAM, je mettrais certainement au moins 4 Go (voire 8) de swap. Au delà, effectivement, même pour une machine à 64 ou 128 Go, je ne vois pas l'intérêt d'augmenter le swap.

Et pour finir, une petite anecdote : j'ai eu besoin de stresser une machine à 256 Go de RAM, et pour ce faire, j'ai monté dessus un Windows 2008 R2 Enterprise (la version standard ne gérant 'que' 32 Go).
Je me suis fait insulter à l’installation parce que Windows aurait voulu créer un swap de 2 x la RAM , soit 512 Go :-) Certains concepts ont la vie dure :-)

A+,
Pascal
sibsib
 
Message(s) : 188
Inscription : 20 Oct 2011 21:08

Re: SWAP (Mémoire virtuelle)

Message par jibe » 21 Mars 2012 00:49

Salut,

Assez amusant, ce débat ! Perso, je ne me pose pas de questions !

- Je n'ai jamais eu besoin, dans mes TPE, de plus de 8 Go de RAM
- Windows ne nous demande pas trop notre avis, et de toutes manière gère bien mal la Swap ! Mais bon, si j'ai bien compris, ce n'est pas trop le sujet
- Linux, par contre, gère assez bien la swap et lui en donner plus n'a je pense aucun inconvénient (si ce n'est de bouffer de l'espace disque)
- Vu les capacités disque qu'on installe actuellement, on n'est pas à quelques Go près (et dire que le premier disque dur que j'ai eu en mains faisait 5 Mo !!!)

J'ai donc tendance à me dire que ce n'est pas trop la peine de se creuser la tête, et que je peux très bien m'en tenir aux (très archaïques il est vrai) recommandations les plus prudentes. Donc, jusqu'au moins 2Go RAM, je mets une swap du double. Au-delà, ça dépend de l'humeur du moment :lol: En tous cas, je n'ai jamais mis 16 Go pour 8Go RAM, et je ne descends jamais en-dessous de la capacité de RAM.

Et bien sûr, au prix de la RAM, ne pas hésiter à en ajouter dès que nécessaire !
jibe. En vert ou en rouge-orangé : je modère - En noir ou autre couleur : je parle à titre personnel.

L'idée que quand on n'a pas quelque chose, on puisse se bouger pour l'avoir, c'est une démarche qui parait absolument normale pour les gens du Logiciel Libre et totalement surnaturelle pour tout le reste de la population. (Benjamin Bayart)
jibe
 
Message(s) : 943
Inscription : 09 Sep 2011 23:19
Localisation : Haute Savoie

Re: SWAP (Mémoire virtuelle)

Message par jibe » 21 Mars 2012 00:52

jibe a écrit :- Vu les capacités disque qu'on installe actuellement, on n'est pas à quelques Go près (et dire que le premier disque dur que j'ai eu en mains faisait 5 Mo !!!)

Là, sibsib ne va peut-être pas être de mon avis : mettre un disque 500Go uniquement pour la swap de ses ESXI, il va peut-être trouver ça un peu exagéré !
jibe. En vert ou en rouge-orangé : je modère - En noir ou autre couleur : je parle à titre personnel.

L'idée que quand on n'a pas quelque chose, on puisse se bouger pour l'avoir, c'est une démarche qui parait absolument normale pour les gens du Logiciel Libre et totalement surnaturelle pour tout le reste de la population. (Benjamin Bayart)
jibe
 
Message(s) : 943
Inscription : 09 Sep 2011 23:19
Localisation : Haute Savoie

Re: SWAP (Mémoire virtuelle)

Message par jdh » 21 Mars 2012 09:47

(J'ai écrit parfois 'cache' pour 'swap').

Compte-tenu de la taille mémoire disponible, de la taille d'un noyau, des modules, seule la charge système et le variation de demande mémoire peut justifier désormais un swap significatif.

On peut en prévoir un swap, par sécurité, avec une taille de 1 à 4 Go au maximum (?).
(Donc plus de lien avec la taille mémoire à partir du moment où celle est suffisante : 2 Go pour un desktop, 4 Go pour un serveur chargé ...)

Pour un serveur type LSTP, serveur de bases de données lourdes et très utilisées, il faut prévoir 4 Go par exemple.


Concernant Windows, il y a lieu de préciser :
- Windows peut utiliser un fichier pour l'hibernation (hiberfile.sys) : même taille que la mémoire puisque la mémoire est copiée avant arrêt.
- Windows utilise un fichier de swap (pagefile.sys) : sert à swaper avec la même logique qu'Unix/Linux pour compléter la mémoire.

L'hibernation n'a pas grand chose à voir avec le mécanisme du swap.

Pour ce swap Windows, il faut noter le sizing "automatique" mis en place par Windows (mémoire fois 1, 2 ou 1,5 selon les systèmes XP, 7, 2k8 ...). (belle anecdote de sibsib !). Il est très difficile (impossible ?) de supprimer ce fichier qui semble presque obligatoire (si on tente cela, le système devient assez instable et semble en créer un quand même !). On peut néanmoins réduire sa taille pour améliorer l'efficacité parce qu'elle est très différente d'un serveur Linux.

Par exemple, avec des XP et 1 Go de mémoire, je fixe une taille de 300 Mo à 600 Mo. Il n'y a pas de raison d'augmenter cette taille si la mémoire est de 2 G ou 3 G. Il est notable que ce swap est systématiquement utilisé (avec la baisse de perf qui va avec) parce que la variabilité de demande mémoire est assez importante : p.e. ouvrir/fermer/ouvrir/fermer un excel est très mauvais.

Ne pas mélanger, en conséquence, la stratégie Windows et Linux en ce qui concerne le swapping.
L'intelligence artificielle n'est rien à côté de la stupidité naturelle.
jdh
 
Message(s) : 731
Inscription : 02 Nov 2011 00:36
Localisation : Nantes - Angers

Re: SWAP (Mémoire virtuelle)

Message par jdh » 21 Mars 2012 19:33

Linux maitrise parfaitement le swap : il ne swappe que quand il ne peut pas d'abord faire autrement.
Par contre, Linux sait utiliser de la mémoire , quand il y en a suffisamment, comme 'buffers' pour accélérer les accès disque.

C'est donc l'inverse de ce que tu as écrit.

Un petit serveur avec par exemple, Apache+MySQL+Php pour quelques applis web peu sollicités genre OcsInventory, Glpi, Zabbix (avec peu de serveurs) tourne très bien avec 2 Go de mémoire et ne swappe pas du tout.
(Perso, j'ai un serveur qui fait de la virtualisation : il ne swappe pas tu tout.)

Dans ton cas de créer un serveur LSTP, je te conseille un swap de 4 Go.
Je préconise un swap de 1 Go par sécurité de façon générique (desktop, petit serveur).
L'intelligence artificielle n'est rien à côté de la stupidité naturelle.
jdh
 
Message(s) : 731
Inscription : 02 Nov 2011 00:36
Localisation : Nantes - Angers

Suivant

Retour vers Questions diverses

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron