Skip to content

Fondamentaux · Chapitre F.8

Unités : kilo, kibi et compagnie

Les préfixes décimaux du SI et les préfixes binaires de la CEI (ko contre Kio), pourquoi un disque de 1 To apparaît comme 931 Gio, bits contre octets dans les débits réseau, nanosecondes et gigahertz, et un tableau de latences réelles mesurées sur ce site, d’un accès cache de 0,9 ns à un aller-retour réseau de 20 ms.

L’informatique couvre des plages absurdes : un transistor commute en quelques picosecondes, un disque contient des téraoctets, un superordinateur fait 10¹⁸ opérations par seconde. Des préfixes comme kilo, giga ou nano rendent ces nombres maniables, mais en informatique certains ont deux sens, et on confond facilement bits et octets. Ce chapitre met de l’ordre dans tout cela, et se termine par un tableau du temps que prennent réellement les opérations courantes.

Les préfixes du SI

Le Système international d’unités (SI) définit des préfixes pour les puissances de 1 000 :

PréfixeSymboleFacteurPréfixeSymboleFacteur
kilok10³millim10⁻³
mégaM10⁶microµ10⁻⁶
gigaG10⁹nanon10⁻⁹
téraT10¹²picop10⁻¹²
pétaP10¹⁵femtof10⁻¹⁵
exaE10¹⁸attoa10⁻¹⁸
zettaZ10²¹zeptoz10⁻²¹
yottaY10²⁴yoctoy10⁻²⁴
ronnaR10²⁷rontor10⁻²⁷
quettaQ10³⁰quectoq10⁻³⁰

Les symboles sont sensibles à la casse : kilo s’écrit avec un k minuscule, et m (milli) et M (méga) diffèrent d’un facteur d’un milliard. Micro utilise la lettre grecque µ, écrite u quand on n’a que l’ASCII (us pour microsecondes). Les préfixes se sont longtemps arrêtés à yotta et yocto ; ronna, quetta, ronto et quecto ont été ajoutés en 2022, en partie à cause de la croissance du volume mondial de données stockées.

En français, l’octet a pour symbole o : ko, Mo, Go, To. Les anglophones écrivent B (byte) : kB, MB, GB, TB.

Les préfixes binaires

La mémoire se compte en puissances de deux, parce qu’une adresse de n bits atteint exactement 2ⁿ emplacements. 2¹⁰ = 1 024 est proche de 1 000, si bien que très tôt « kilooctet » en est venu à signifier 1 024 octets quand on parlait de mémoire. L’approximation se dégrade à chaque cran :

Décimal (SI)ValeurBinaire (CEI)ValeurÉcart
kilooctet, ko10³kibioctet, Kio2¹⁰ = 1 0242,4 %
mégaoctet, Mo10⁶mébioctet, Mio2²⁰ = 1 048 5764,9 %
gigaoctet, Go10⁹gibioctet, Gio2³⁰ = 1 073 741 8247,4 %
téraoctet, To10¹²tébioctet, Tio2⁴⁰ = 1 099 511 627 77610,0 %

Pour lever l’ambiguïté, la CEI (Commission électrotechnique internationale) a défini en 1998 les préfixes binaires kibi, mébi, gibi, tébi (Ki, Mi, Gi, Ti, pour « kilo binaire », etc.) ; en anglais on écrit KiB, MiB, GiB. L’industrie a tardé à adopter les nouveaux noms, et KB, MB et GB sont longtemps restés la façon habituelle d’écrire les puissances de deux. Depuis, leur usage s’est répandu, de façon inégale : sous Linux, free -h affiche Gi, tandis que df -h et ls -h calculent en puissances de 1 024 mais affichent un simple G ou K ; le df -h de macOS affiche Gi. La taille des disques, contrairement à celle de la mémoire, ne s’exprime pas au sens binaire : les fabricants utilisent des unités décimales depuis des décennies.

Qui entend quoi aujourd’hui

La règle pratique : la mémoire est binaire, le stockage et les réseaux sont décimaux. Sur le Mac où ce chapitre a été écrit :

  • Mémoire : sysctl hw.memsize indique 68 719 476 736 octets. C’est exactement 64 Gio, et Apple la vend comme « 64 Go ».
  • Les pages font 16 Kio (16 384 octets), les lignes de cache 128 octets, et chaque cœur performance a un cache de données L1 de 128 Kio et partage un L2 de 16 Mio : que des puissances de deux.
  • Le SSD : diskutil info disk0 indique « 1.0 TB (1000555581440 Bytes) », en décimal, comme compte le fabricant.

Les systèmes d’exploitation ne s’accordent pas sur l’affichage. Le Finder de macOS utilise des unités décimales depuis 2009. Windows calcule en binaire mais écrit « Go ». En ligne de commande, le même volume du Mac apparaît comme 926Gi avec df -h (binaire) et 995G avec df -H (décimal).

Pourquoi un disque de 1 To affiche 931 Go

Un disque vendu 1 To contient 10¹² octets. Windows divise par 2³⁰ et appelle le résultat « Go » :

10¹² bytes ÷ 1,073,741,824 bytes/GiB = 931.3 GiB

Il ne manque aucun espace : 931,3 Gio et 1 000 Go sont le même nombre d’octets, compté dans des unités différentes. Le SSD de ce Mac, avec 1 000 555 581 440 octets, fait 931,8 Gio. L’écart grandit avec la taille : un disque « 4 To » fait 3,64 Tio. L’espace réellement utilisable est encore un peu plus petit, parce que le système de fichiers garde de la place pour ses propres structures, et que le système d’exploitation en occupe une partie.

Bits et octets

En anglais, un b minuscule désigne des bits et un B majuscule des octets ; en français, on écrit bit et o. Il y a 8 bits dans un octet. Les débits réseau s’expriment en bits par seconde, avec des préfixes décimaux : l’Ethernet gigabit transporte 10⁹ bits par seconde, et une offre Internet « 500 Mb/s » 500 millions de bits par seconde. Les tailles de fichiers et la progression des téléchargements s’affichent en octets par seconde. On divise par 8 pour convertir :

1 Gb/s ÷ 8 = 125 MB/s        (before protocol overhead)
500 Mb/s ÷ 8 = 62.5 MB/s

En-têtes, accusés de réception et retransmissions prennent leur part, si bien qu’un transfert n’atteint jamais tout à fait ces valeurs. Les débits s’écrivent souvent kbps et Mbps ; on voit aussi kbit/s et Mb/s. Attention aux interfaces de stockage, qui comptent aussi en bits : un port USB « 10 Gbps », c’est 10 gigabits par seconde.

Temps et fréquence

Le temps informatique se mesure en petites unités :

UnitéSecondesCe qui se passe en à peu près ce temps
picoseconde, ps10⁻¹²une porte logique commute
nanoseconde, ns10⁻⁹quelques cycles d’horloge ; un accès réussi au cache L1
microseconde, µs10⁻⁶un changement de contexte ; une lecture sur SSD (des dizaines de µs)
milliseconde, ms10⁻³un déplacement de tête de disque dur ; un aller-retour réseau à travers un pays

La fréquence est l’inverse d’une période : une horloge à f hertz bat toutes les 1/f secondes. Une horloge à 1 GHz a une période de 1 ns ; à 4 GHz, un cycle dure 250 ps. Sur le M2, une chaîne d’additions dépendantes, chacune ayant besoin du résultat précédent, a tourné à 0,31 ns par addition : une par cycle, les cœurs performance tournaient donc à environ 3,3 GHz pendant le test. La lumière, ce qui va le plus vite, parcourt environ 30 cm par nanoseconde dans le vide, et environ 9 cm pendant un cycle de 0,3 ns, moins dans un fil. C’est une des raisons pour lesquelles les puces sont petites et la mémoire lointaine en nombre de cycles, comme l’abordent le chapitre sur l’horloge et le chapitre signaux dans les fils.

Une autre horloge du même Mac, la base de temps que compte mach_absolute_time, tourne à 24 MHz (sysctl hw.tbfrequency) : un tic toutes les 41,7 ns.

Combien de temps prennent les choses

Les valeurs ci-dessous ont été mesurées sur l’Apple M2 Ultra sur lequel ce site est écrit, dans ce chapitre ou dans les chapitres cités. La dernière colonne les met à l’échelle pour qu’une nanoseconde devienne une seconde, ce qui rend les ordres de grandeur plus parlants.

OpérationDuréeOù c’est mesuréSi 1 ns durait 1 s
un cycle CPU (add dépendant)0,31 nsce chapitre0,3 s
chargement servi par le cache L10,9 ns (3 cycles)ce chapitre, parcours de pointeurs sur 16 Kio ; le test d’alignement de la vue d’ensemble de l’ISA a mesuré 1,19 ns1 s
appel de fonction et retour0,9 nschapitre sur les déroutements1 s
mauvaise prédiction de branchement15 à 20 cycles, environ 5 nsestimé dans le chapitre sur la prédiction de branchement5 s
chargement aléatoire dans 8 Mio (cache L2)13 nsce chapitre13 s
clock_gettime via le vDSO17 nschapitre sur les appels système17 s
appel système (getppid)92 ns (macOS), 150 ns (VM Linux)appels système, déroutements1,5 à 2,5 min
chargement aléatoire dans 1 Gio (mémoire principale, plus défauts de TLB)125 à 140 nsce chapitreenviron 2 min
deux changements de contexte via un tube7 à 36 µschapitre sur les processus2 à 10 heures
lancer un programme et l’attendre0,22 ms (VM Linux) à 2 ms (macOS)chapitre sur les processus2,5 à 23 jours
connexion TCP à example.com (un aller-retour réseau)18 à 22 msce chapitre, avec curlenviron 8 mois

Les valeurs mémoire viennent d’un parcours de pointeurs (pointer chase) : un tableau rempli d’un cycle aléatoire de pointeurs, suivi pendant 20 millions d’étapes, pour que chaque chargement dépende du précédent et que le matériel ne puisse ni les prédire ni les superposer. La taille du tableau décide quel niveau répond : 16 Kio tiennent dans le L1, 8 Mio dans le L2, 1 Gio seulement en mémoire principale. Chaque mesure a été répétée et a varié de quelques pour cent. Le chiffre pour 1 Gio inclut le coût des défauts de TLB, puisqu’un accès aléatoire dans 1 Gio rate aussi les caches de traduction d’adresses ; le chapitre sur les caches donne des valeurs typiques pour d’autres machines, dont les SSD (des dizaines de µs) et les disques durs (5 à 10 ms).

La forme compte plus que chaque valeur : chaque marche vers le bas de la hiérarchie mémoire, ou chaque franchissement d’une frontière comme le noyau ou le réseau, coûte un à trois ordres de grandeur. Optimiser les performances, c’est surtout rester en haut de ce tableau.

À retenir

  • Les préfixes du SI sont des puissances de 1 000, de quecto (10⁻³⁰) à quetta (10³⁰) ; ronna, quetta, ronto et quecto datent de 2022.
  • Les préfixes binaires de la CEI sont des puissances de 1 024 : Kio, Mio, Gio, Tio (KiB, MiB… en anglais). L’écart atteint 10 % au niveau téra.
  • La mémoire se mesure en unités binaires, les disques et les réseaux en unités décimales : un disque de 1 To fait 931,3 Gio, que Windows affiche « 931 Go ».
  • Un bit n’est pas un octet : 1 Gb/s font 125 Mo/s avant surcoût.
  • Période = 1 / fréquence : 1 GHz ↔ 1 ns. Les cœurs performance du M2 tournaient à environ 3,3 GHz, 0,31 ns par cycle.
  • Mesuré sur le M2 : accès L1 0,9 ns, mémoire principale environ 130 ns, appel système environ 100 à 150 ns, changements de contexte en µs, lancement d’un programme en ms, aller-retour réseau environ 20 ms.

Fondamentaux

  1. F.1Niveaux d’abstraction et brève histoire des ordinateurs
  2. F.2Binaire et hexadécimal
  3. F.3Complément à deux et entiers signés
  4. F.4Virgule flottante (IEEE 754)
  5. F.5Caractères, ASCII et Unicode
  6. F.6Boutisme (endianness)
  7. F.7Parité, codes de Hamming et correction d’erreurs
  8. F.8Unités : kilo, kibi et compagnie