Pourquoi devons-nous définir l'espace de swap comme deux fois plus grand que notre mémoire physique?

Lorsque nous voulons configurer un système linux, il existe une suggestion commune de définir l'espace de swap deux fois plus grand que votre mémoire physique. Je veux savoir pourquoi avons-nous besoin de cela, et comment est-ce que cette suggestion est?

La réponse courte est "Vous n'avez pas à".

Selon le type de noyau / système, il peut être logique d'étendre l'espace de swap comme cela, par exemple dans la page de manuel d' accord de FreeBSD (7), nous trouvons la raison d'être suivante d'une taille de swap d'au moins 2 fois de la taille de la mémoire physique:

Vous devez généralement dimensionner votre espace de swap à environ 2x de mémoire principale pour les systèmes avec moins de 2 Go de RAM ou environ 1x mémoire principale si vous avez plus. Si vous n'avez pas beaucoup de RAM, vous voudrez généralement beaucoup plus de swap. Il n'est pas recommandé de configurer moins de 256 Mo d'échange sur un système et vous devez garder à l'esprit l'expansion de la mémoire future lors du dimensionnement de la partition d'échange. Les algorithmes de pagination VM du kernel sont syntonisés pour fonctionner mieux quand il y a au moins 2 fois swap par rapport à la mémoire principale. La configuration de trop peu d'échange peut entraîner des inefficacités dans le code d'analyse de la page VM et créer des problèmes plus tard si vous ajoutez plus de mémoire à votre machine. Enfin, sur les grands systèmes avec plusieurs disques SCSI (ou plusieurs disques IDE fonctionnant sur différents contrôleurs), nous vous recommandons fortement de configurer l'échange sur chaque lecteur. Les partitions de swap sur les lecteurs devraient avoir approximativement la même taille. Le noyau peut gérer des tailles arbitraires, mais les structures de données internes s'élargissent à 4 fois la plus grande partition d'échange. Garder les partitions de swap près de la même taille permettra au noyau de répartir de manière optimale l'espace de swap sur les disques N. Ne vous inquiétez pas de l'exagérer un peu, l'espace de swap est la grâce salvatrice d'UNIX et même si vous n'utilisez pas trop d'échange, cela vous donnera plus de temps pour récupérer d'un programme en fuite avant d'être obligé de redémarrer.

D'autres facteurs peuvent être importants lorsque vous décidez de l'espace de swap à attribuer, de l'attribuer, etc. Par exemple, si vous installez un grand serveur doté d'une mémoire physique de 128 Go, il est probablement préférable d'éviter de pré-attribuer 256 Go d'espace disque pour un échange qui ne sera jamais utilisé.

D'autre part, avoir un espace de swap permet souvent de pénétrer les décharges du noyau (p. Ex. Dans Open-, Net et FreeBSD). C'est donc une bonne idée d'avoir au moins suffisamment d'espace de swap pour récupérer une décharge complète du noyau sur la panique.

Il n'y a pas de règle absolue qui correspond à tous les cas. Vous devez lire sur le comportement de votre système spécifique, apprendre comment cela fonctionne, réfléchir à l'utilisation prévue du système et décider de la meilleure taille d'espace de swap qui correspond à vos besoins.

Vous n'avez pas du tout besoin. Les anciennes versions de Windows traitera chaque page de la mémoire allouée comme étant essentiellement un mmap sur le fichier d'échange, donc vous avez besoin d'au moins votre taille de RAM physique totale dans le swap pour qu'il soit utile – ce n'est plus le cas aujourd'hui et n'a jamais été le Cas dans Linux, mais la rumeur persiste.

Cependant, il existe un cas où le remplacement d'une RAM est au moins souhaitable – l'hibernation. Puisque Linux utilise le fichier swap pour l'hibernation (aka, suspend-to-disk), vous avez besoin d'un nombre suffisant pour contenir toutes les données dans la RAM, plus toutes les données qui ont déjà été échangées (moins la mémoire cache RAM). Ce n'est que le cas pour les machines qui doivent hiberner, comme les ordinateurs portables, bien sûr.

Enfin, avoir trop de swap peut être une mauvaise chose, malgré ce que d'autres diront. Pensez – si vous disposez de 4G de RAM, et en plus besoin d'un 8G supplémentaire de swap, pensez-vous que votre système sera toujours utilisable, qu'est-ce que tout échange de / vers le disque fonctionne? Il est souvent préférable que le processus de détection de la mémoire soit tué tout de suite lorsque vous manquez de mémoire, plutôt que d'avoir l'ensemble du système ralentir à un niveau inutilisable lorsqu'il commence à consacrer tout son temps à la mise en place des données à l'intérieur et à l'extérieur du swap.

Une ancienne recommandation basée sur des hypothèses sur la capacité typique de la mémoire système, la vitesse du bus de mémoire par rapport à la vitesse du disque et le pourcentage de processus de temps dépensés dans différents états d'attente. Je suis sceptique que ces jours-ci, vous voudriez plus que peut-être 1/2 mémoire physique dans l'espace de swap – juste assez pour éviter les tueries OOM aléatoires lorsque vous utilisez une utilisation complète de la mémoire. Mais dépend entièrement de votre charge de travail typique, YMMV, etc.

Il y a longtemps, il y avait une variante unix commune (je pense que c'était un BSD, mais je ne trouve pas la référence en ce moment) qui allouerait chaque page de mémoire virtuelle dans l'espace de swap. Donc, si vous aviez autant d'échange que de RAM, la taille de votre mémoire virtuelle serait toujours la même que votre RAM. La recommandation habituelle était alors d'avoir deux fois plus d'échange que la RAM, ce qui a rendu la mémoire virtuelle deux fois plus grande que la RAM.

Les uniformes modernes ne se comportent pas de cette façon, donc la raison de la règle est obsolète (je pense qu'il était déjà obsolète en 1992, donc ce n'était jamais pertinent pour Linux). Mais, curieusement, la règle survit. Si vous le suivez maintenant, vous obtenez une mémoire virtuelle qui représente trois fois votre RAM, alors que l'intention originale était d'obtenir deux fois plus.

Juste parce que la raison historique de la règle est fausse ne veut pas dire que c'est stupide. L'espace disque est devenu moins cher, donc il est logique d'allouer plus de swap. Combien de swap vous devriez dépend beaucoup de la quantité de RAM que vous avez et de la façon dont vous l'utilisez. Vous pouvez exécuter un système sans échange, mais vous n'avez pas la possibilité de choisir les programmes à tuer si votre RAM se remplit et le système peut être plus lent (parfois il vaut mieux utiliser la RAM pour le cache et échanger une mémoire de programme en dehors). L'allocation de trop de swap coûte une petite quantité de RAM (pour les structures de données du noyau) et, bien sûr, l'espace disque (mais aujourd'hui, il est habituellement bon marché sauf sur SSD). Le fait d'avoir suffisamment d'échange pour s'adapter à toute votre mémoire virtuelle est nécessaire si vous voulez faire une mise en veille prolongée.