Pourquoi votre VM n'a pas de swap
Le swap laisse une machine prétendre qu'elle a plus de mémoire qu'elle n'en a. Sur du flash enterprise, cette prétention coûte de l'usure du stockage et une falaise de latence, donc nous dimensionnons la RAM à la place.
Dans cet article 5 sections
- La RAM répond en environ 100 nanosecondes. Le flash rapide répond en environ 100 microsecondes. Une charge qui tombe dans le swap tourne sur une mémoire environ mille fois plus lente.
- Le swapping transforme un manque de RAM en usure du stockage et en falaise de latence. La charge échoue plus lentement et de façon plus confuse au lieu d'échouer clairement.
- Nous dimensionnons la RAM à la place. Le Sizing Desk demande la vraie sortie de votre free -m avant de proposer quoi que ce soit.
Les machines virtuelles que nous construisons sont livrées sans swap. Quand l'une d'elles manque de mémoire, l'échec est immédiat et visible, et la solution est une conversation sur la RAM. Sur une fiche technique, cela se lit comme une omission, alors voici le raisonnement en entier. Rien de tout cela ne dépend de notre matériel. Vous pouvez appliquer l'argument à n'importe quelle VM que vous faites tourner n'importe où.
Le swap existe pour laisser une machine dépasser sa mémoire physique
Le swap est la soupape de trop-plein du noyau. Quand la mémoire physique vient à manquer, il déplace sur le disque les pages qu'il juge les plus froides et donne la RAM libérée à qui la demande. La machine peut annoncer plus de mémoire que le silicium n'en contient, chaque allocation peut réussir, et la vérité arrive plus tard, sous forme de latence, chaque fois qu'un processus touche une page qui, finalement, vivait sur le disque.
Cet échange avait du sens quand il a été inventé. La RAM était rare et chère, les machines étaient partagées par de nombreuses tâches, et un traitement par lot qui rampait toute la nuit valait mieux qu'un traitement qui mourait. Chaque élément de ce contexte s'est depuis inversé : la RAM est la moins chère qu'elle ait jamais été par gigaoctet, la machine est à vous seul, et les charges sont des services interactifs où une excursion de latence multipliée par dix est indistinguable d'une panne. La soupape de trop-plein est restée dans les valeurs par défaut malgré tout, parce que les valeurs par défaut survivent à leurs raisons.
Sortir de la RAM coûte trois ordres de grandeur
Le dossier contre le swap est de l'arithmétique avant d'être de la philosophie. La mémoire et le stockage sont à des étages différents de l'immeuble de la latence, et l'escalier entre eux est long.
- CACHE DU CPU
- environ une nanoseconde
- RAM
- environ 100 nanosecondes
- FLASH RAPIDE
- environ 100 microsecondes, mille fois plus lent que la RAM
- UN PAGE FAULT VERS LE SWAP
- l'aller-retour complet vers le stockage, plus la file d'attente, sur le chemin le plus chaud de votre charge
Les chiffres exacts varient selon le matériel. Les écarts entre les étages, non. Sous une vraie pression mémoire, la machine prend cet escalier en continu : le noyau évince des pages, la charge les rappelle aussitôt, et le CPU passe ses cycles à attendre le stockage. Le load average grimpe pendant que le débit utile s'effondre.
~0,1 à 1 ms
100 ns
~10 000×
Le swap brûle du flash enterprise pour cacher une erreur de dimensionnement
Sur les disques rotatifs, le swap était simplement lent. Sur le flash, il est aussi corrosif. Le trafic de swap est le pire motif que vous puissiez donner à du flash : un flux continu de petites écritures aléatoires qui n'existent pour aucune raison, sauf que la machine manque de RAM. Chacune de ces écritures vieillit une cellule pour entretenir une illusion.
Et la charge ne reçoit rien en échange de l'usure. Elle boite au rythme du stockage jusqu'à ce que la pression cesse ou que quelqu'un intervienne. La baie sous votre VM ici est du HPE 3PAR all-flash, et son travail est de servir vos données à pleine vitesse. Dépenser son endurance en écriture comme fausse mémoire est un mauvais échange à n'importe quel prix, et c'est pourquoi nous préférons avoir la conversation du dimensionnement dès le départ plutôt que de la masquer par de la pagination.
Sans swap, l'épuisement de la mémoire produit une ligne de log au lieu d'un mystère
L'argument le plus fort est diagnostique, et quiconque a traqué une semaine de lenteur à travers une stack de supervision le connaît déjà. Avec du swap, manquer de mémoire ressemble à tout sauf à un manque de mémoire. La latence monte sur chaque service à la fois, aucune erreur n'apparaît dans aucun log, et les tableaux de bord pointent partout où l'attente se fait sentir, en général la base de données et le stockage. Des équipes perdent des jours dans cette chasse, et le swap la fabrique sur une seule machine, systématiquement, par conception.
- La latence monte sur chaque service à la fois, sans erreur dans aucun log
- Les tableaux de bord accusent la base, puis le stockage, puis le réseau
- La baie absorbe un flux de petites écritures aléatoires dont le seul travail est de cacher le manque
- Le diagnostic arrive des jours plus tard, après que quelqu'un a corrélé les graphiques
- Le noyau tue le plus gros coupable et le nomme dans le log
- L'échec a un horodatage, un nom de processus et un total de mémoire
- La baie dépense ses écritures sur de vraies données
- La solution est une conversation de redimensionnement le jour même
Un graphique de mémoire sur une machine sans swap dit la vérité jusqu'au bord.
Nous dimensionnons la RAM honnêtement et nous demandons votre vrai free -m
La solution honnête à un manque de mémoire est la même depuis l'invention de la pagination : plus de RAM, ou un working set plus petit. C'est donc là que nous mettons l'effort. Le Sizing Desk demande la vraie sortie de free -m depuis votre machine actuelle avant de proposer quoi que ce soit, parce que la colonne available de cette commande clôt des discussions que les adjectifs ne clôront jamais, et la même lecture qui supprime le besoin de swap réduit en général aussi le devis.
La méthode complète, avec des exemples travaillés pour chaque chiffre que nous demandons, se trouve dans comment dimensionner un serveur. Sur du matériel qui nous appartient, la marge est déjà dans la machine que vous avez payée, donc la provisionner ne coûte rien de plus à votre pic, ce qui retire la dernière excuse économique pour traiter le stockage comme de la RAM de débordement.
Réponses directes
Le noyau n'a-t-il pas besoin d'un peu de swap pour bien fonctionner ?+
Le noyau peut utiliser le swap pour évincer des pages réellement froides et donner la RAM récupérée au cache disque, et sur une machine chroniquement à l'étroit, cela aide à la marge. La marge est le problème. Cela achète quelques pour cent de mémoire effective tout en cachant si la machine est seulement assez grande, et cela brouille chaque graphique de mémoire sur lequel vous compterez plus tard. Sur une machine correctement dimensionnée, le gain des pages froides s'arrondit à zéro, et la clarté diagnostique d'une frontière mémoire nette vaut bien plus à 3 heures du matin.
Comment savoir combien de RAM j'utilise réellement ?+
Lancez free -m pendant un vrai pic et lisez la colonne available. La méthode complète, avec des exemples travaillés pour chaque chiffre, se trouve dans notre article sur le dimensionnement, comment dimensionner un serveur. Si cette colonne dit que vous êtes réellement à l'étroit, la réponse est plus de RAM, et nous le dirons.
Le « sans swap » est une petite décision en aval de plus grandes : dimensionnez les machines sur des chiffres réels plutôt que sur des factures, et mettez du matériel sérieux en dessous pour que les chiffres tiennent une mauvaise nuit. La conversation sur la RAM est moins chère que le mystère qu'elle évite.
Dimensionnez la RAM honnêtement
Le Sizing Desk part des vrais chiffres de votre machine et propose une configuration à partir de nos vraies briques. Quand vos chiffres disent moins, il vous dimensionne à la baisse.
Ouvrir le Sizing DeskVous êtes arrivé à la fin.
Mettez la lecture en pratique
Que faites-vous tourner ?
Parlez-nous de la charge de travail, du trafic et des exigences de reprise. Commencez par le configurateur de serveur, ou passez en revue les détails avec un ingénieur.
Écrit par les ingénieurs qui construisent et exploitent l'infrastructure qu'il décrit.Parler à un ingénieur
