Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
1 MiB = 0,0009765625 GiB
Saisissez une valeur et la conversion de mébioctet en gibioctet suit pendant que vous tapez. Le facteur vaut exactement 0,0009765625 : c’est ce que représente 1 Mio en Gio. Le calcul se fait sur votre propre appareil ; une fois la page chargée, elle n’interroge plus aucun serveur.
700 Mio is 0,6836 Gio
— un CD audio, d’où vient le chiffre.
8 Mio is 0,007813 Gio
— un bloc de mémoire tel qu’un programme en réserve.
8192 Mio is 8 Gio
— la mémoire d’un portable de milieu de gamme.
953300 Mio is 931 Gio
— ce que Windows affiche pour un disque d’un téraoctet.
| Mio | Gio |
|---|---|
| 10 | 0,009765625 |
| 20 | 0,01953125 |
| 50 | 0,048828125 |
| 100 | 0,09765625 |
| 500 | 0,48828125 |
| 1000 | 0,9765625 |
| 5000 | 4,8828125 |
| 10000 | 9,765625 |
Convertir des Mio en Gio
Un mébioctet vaut 1 024 kibioctets, soit 1 048 576 octets. Les outils Linux et les chiffres de mémoire désignent presque toujours cela, même quand ils écrivent « Mo ».
Un gibioctet vaut 1 073 741 824 octets, environ 7 % de plus qu’un gigaoctet. Windows mesure en gibioctets tout en les étiquetant « Go », et c’est là tout le mystère de l’espace disque qui s’évapore.
Dans ce sens, l'opération est une division, et par un nombre entier : 1 024 de ces unités entrent dans un gibioctet sans reste. Le seul inconvénient, c'est que les résultats tombent en fractions — un tiers, un douzième — au lieu des chiffres ronds que donne le sens inverse.
Rien ne se perd pour autant : la division est exacte. Si votre résultat refuse de tenir en place en décimal — 0,0833… et compagnie —, c'est la fraction qui transparaît, pas une erreur qui s'installe.
Un MiB vaut 1 024 fois l'unité du dessous ; un MB, 1 000. Sur cette page, c'est l'écart entre 0,001 GiB et 0,0009 GiB — 4,9 % — et il grandit à chaque palier : négligeable sur une photo, visible sur un disque dur.
Le mystère de l'espace disque manquant tient tout entier là-dedans, et sur cette page il vaut 4,9 %. Un disque vendu en MB contient exactement ce qui est annoncé ; Windows divise ensuite par 1 024 au lieu de 1 000, garde le nom décimal, et affiche 0,0009 GiB là où la boîte annonçait 0,001 GiB. macOS compte ces tailles en unités décimales depuis 10.6, d'où le même disque qui paraît de deux tailles sur deux machines — rien n'a disparu et personne n'arrondit : les mêmes octets portent deux noms.
Les quantités de ressources Kubernetes acceptent deux familles de suffixes. La famille binaire — Ki, Mi, Gi, Ti, Pi, Ei — multiplie par des puissances de 1 024. La famille décimale — m, k, M, G, T, P, E — multiplie par des puissances de 1 000, avec un k minuscule pour kilo, et le m en tête est un milli qui existe pour les fractions de CPU plutôt que pour la mémoire. memory: 512Mi et memory: 512M sont tous deux valides, diffèrent de 24 870 912 octets, et ne produisent aucun avertissement dans un sens ou dans l’autre.
L’écart de 4,9 % au pas du mébioctet s’élargit à 7,4 % au pas du gibioctet : 4Gi font 4 294 967 296 octets et 4G en font 4 000 000 000. Tous les outils de la chaîne conserveront fidèlement celui qui a été écrit, et la valeur affichée dans un tableau de bord est en général reformatée dans l’unité que préfère ce tableau de bord, de sorte que le suffixe d’origine n’est visible que dans le manifeste lui-même. Chercher dans un dépôt un M ou un G nu dans un champ mémoire est un audit de cinq minutes qui mérite d’être fait une fois.
Le CPU est compressible : un conteneur qui demande plus que sa limite est étranglé et continue, lentement. La mémoire ne l’est pas. Quand le cgroup mémoire d’un conteneur dépasse sa limite, le tueur OOM du noyau termine un processus à l’intérieur, le conteneur rapporte le code de sortie 137, et le pod redémarre. Il n’y a pas de dégradation progressive et pas d’avertissement entre les deux, ce qui fait qu’une limite de 4,9 % plus petite que prévu n’est pas une erreur d’arrondi mais un changement dans la fréquence à laquelle une charge de travail meurt.
Cela signifie aussi que les deux suffixes échouent de manière asymétrique. Écrire M là où Mi était voulu rend la limite plus petite et le conteneur plus susceptible d’être tué — une défaillance visible qui sera investiguée. Écrire Mi là où M était voulu rend la limite plus grande, ce qui ne se manifeste en rien jusqu’à ce que le nœud soit sur-engagé et que l’ordonnanceur ait empilé sur des chiffres qui étaient tous un peu généreux. Le second est celui qui coûte de l’argent en silence.
Une JVM démarrée avec -Xmx4096m a un tas de 4 Gio et une empreinte totale sensiblement plus grande. Le metaspace contient les métadonnées de classes et n’est pas borné par défaut ; chaque thread prend sa pile, typiquement 1 Mio, en dehors du tas ; le cache de code du JIT vaut 240 Mio par défaut sur HotSpot 64 bits ; les tampons d’octets directs utilisés par Netty et la plupart des serveurs NIO sont en mémoire native ; et le ramasse-miettes conserve ses propres structures. Une limite de conteneur égale à -Xmx est un conteneur qui sera tué.
La pratique courante consiste à donner au conteneur 25 à 50 % de plus que le tas, ou à ne plus fixer du tout -Xmx et laisser la JVM se dimensionner. Depuis JDK 10, le runtime lit la limite du cgroup et applique -XX:MaxRAMPercentage, qui vaut 25 par défaut — assez conservateur pour qu’un conteneur de 4Gi reçoive un tas de 1 Gio sauf si le pourcentage est relevé. Le fixer à 70 ou 75 et laisser la JVM faire l’arithmétique supprime un des deux chiffres qui peut être faux.
Un nœud annoncé à 16 Gio n’offre pas 16 384 Mio aux pods. Capacité moins kube-reserved moins system-reserved moins le seuil d’éviction strict donne allocatable, et sur un cluster géré la réserve va en général de quelques centaines de mébioctets sur un petit nœud à bien plus d’un gibioctet sur un grand. kubectl describe node imprime capacité et allocatable côte à côte, et la différence est le nombre qui décide combien de réplicas tiennent réellement.
C’est ici que la conversion en gibioctets prouve son utilité, parce que l’arithmétique d’optimisation en mébioctets invite aux erreurs. Neuf réplicas à 1 536 Mio font 13 824 Mio, soit 13,5 Gio, ce qui tient dans 14,6 Gio d’allocatable avec de la place pour les daemonsets et ne tient plus si le nœud réserve plus qu’il n’en avait l’air. Faire la somme en mébioctets et la comparer à un nœud exprimé en gibioctets est comment un cluster se retrouve à un pod en deçà du nombre de réplicas prévu, sans cause évidente.
La requête est ce que l’ordonnanceur réserve, et la limite est ce que le noyau applique, et le rapport entre les deux décide la priorité d’éviction du pod. Requête égale à la limite donne Guaranteed ; une requête plus basse que la limite donne Burstable ; aucune des deux donne BestEffort, qui est évincé en premier quand un nœud est sous pression. La classe découle des deux nombres plutôt que d’être déclarée, de sorte qu’un manifeste qui fixe 512Mi et 1Gi a choisi Burstable, que quelqu’un l’ait voulu ou non.
Pour la mémoire en particulier, l’argument en faveur de l’égalité est plus fort que pour le CPU. Un pod Burstable qui utilise habituellement plus que sa requête est ordonnancé comme s’il était petit et tué comme s’il était grand, et le nœud sur lequel il atterrit est sur-engagé sur la force d’un chiffre que personne n’a vérifié. Quand l’ensemble de travail est connu, écrire le même chiffre en gibioctets deux fois est à la fois plus simple et plus honnête qu’un écart que personne ne revisite.
Le manifeste dit 1536Mi ; Grafana dit 1,5 Gio ; la console infonuagique dit 1,61 Go ; le rapport de coût dit 1,6 Go-heures. Les quatre sont les mêmes 1 610 612 736 octets, présentés par quatre outils aux conventions différentes, et seuls les deux premiers sont du côté binaire. Rapprocher une facture d’un manifeste exige de savoir de quel côté chaque chiffre se trouve avant de les comparer, et l’écart de 7,4 % est assez grand pour qu’un désaccord ressemble à une vraie divergence.
L’habitude qui aide est de garder une unité canonique par document. Les plans de capacité en gibioctets, les manifestes dans celui de Mi ou Gi qui garde le nombre entier, et tout chiffre exprimé en unité décimale étiqueté comme tel. Une feuille de capacité dont l’en-tête de colonne dit Gio et dont les chiffres sortent d’une console qui rapporte en Go est fausse d’un quinzième et le restera jusqu’à ce que quelqu’un la reconstruise.
Le chiffre qui mérite d’être converti est celui que la charge utilise réellement, et container_memory_working_set_bytes est la métrique sur laquelle le noyau et le tueur OOM agissent effectivement — la mémoire résidente moins le cache de pages qui peut être réclamé. En prendre le pic sur une quinzaine, ajouter de la marge, et arrondir vers le haut à un chiffre propre en mébioctets ou en gibioctets produit une limite qui peut être défendue ; prendre le RSS du conteneur, ou pire le rapport de tas de la JVM lui-même, en produit une qui ne le peut pas.
Arrondir vers le haut à une puissance de deux quand le choix est libre. Une limite à 1 536 Mio fait 1,5 Gio et s’aligne proprement dans des nœuds dimensionnés en gibioctets ; une limite à 1 600 Mio fait 1,5625 Gio, s’aligne mal, et indique au prochain lecteur que le chiffre vient d’un calcul décimal quelque part en amont. L’arithmétique est exacte dans les deux sens, de sorte que la seule chose qu’on optimise est la lisibilité du nombre pour la prochaine personne qui devra le modifier.
1 Mio vaut 0,0009765625 Gio. La valeur est exacte et non arrondie : la correspondance de mébioctet en gibioctet est fixée par définition.
Non. Le calcul se fait dans votre navigateur. Vous pouvez couper la connexion et continuer à calculer — c’est d’ailleurs la façon la plus simple de le vérifier.
Parce que deux unités différentes portent le même nom. Les fabricants comptent 1 Go = 1 000 000 000 octets ; Windows affiche des gibioctets, soit 1 073 741 824 octets, tout en les appelant « Go ». Le même disque paraît ainsi environ sept pour cent plus petit. Rien n’a disparu.
Un Gio vaut 1024 Mio. C’est le même rapport lu à l’envers : un résultat obtenu sur une page et repassé par l’autre doit revenir à son point de départ.
Ce que cette page affirme sur unités d’information se vérifie : voici les documents qui le fixent.
Le facteur figure dans la page sous forme de constante, et le calcul tient en quatre opérations. Rien n’est donc envoyé et rien n’est attendu : ce que vous saisissez ne quitte jamais le navigateur, faute de requête dans laquelle voyager.