Pourquoi Debian Linux autorise-t-il jusqu'à 128 To d'espace d'adressage virtuel par processus mais seulement 64 To de mémoire physique?

23

Je viens de lire ici :

  • jusqu'à 128 To d'espace d'adressage virtuel par processus (au lieu de 2 Go)
  • Prise en charge de la mémoire physique de 64 To au lieu de 4 Go (ou 64 Go avec l'extension PAE)

Pourquoi donc? Je veux dire, la prise en charge de la mémoire physique est limitée par le noyau ou par le matériel actuel?

Pourquoi auriez-vous besoin de deux fois plus d'espace mémoire virtuelle que la mémoire physique que vous pouvez réellement traiter?

gsi-frank
la source
Vous pouvez également ajouter un swap.
Thorbjørn Ravn Andersen
2
c'est beaucoup de RAM ...
dalearn
4
@dalearn - vous savez, quand j'ai appris que vous pourriez obtenir une extension de mémoire banque à commutation de 8 bits micros qui leur permettra d' avoir jusqu'à 4096KB, je l' ai dit exactement la même chose ...
Jules

Réponses:

35

Ces limites ne viennent pas de Debian ou de Linux, elles viennent du matériel. Différentes architectures (processeur et bus mémoire) ont des limites différentes.

Sur les processeurs PC x86-64 actuels, la MMU autorise 48 bits d'espace d'adressage virtuel . Cela signifie que l'espace d'adressage est limité à 256 To. Avec un bit pour distinguer les adresses du noyau des adresses utilisateur, cela laisse 128 To pour l'espace d'adressage d'un processus.

Sur les processeurs x86-64 actuels, les adresses physiques peuvent utiliser jusqu'à 48 bits , ce qui signifie que vous pouvez avoir jusqu'à 256 To. La limite a progressivement augmenté depuis l'introduction de l'architecture amd64 (à partir de 40 bits si je me souviens bien). Chaque bit d'espace d'adressage coûte un peu de câblage et de logique de décodage (ce qui rend le processeur plus cher, plus lent et plus chaud), les fabricants de matériel sont donc incités à réduire la taille.

Linux n'autorise que les adresses physiques à aller jusqu'à 2 ^ 46 (vous ne pouvez donc avoir que jusqu'à 64 To) car il permet à la mémoire physique d'être entièrement mappée dans l'espace du noyau. N'oubliez pas qu'il y a 48 bits d'espace d'adressage; un bit pour le noyau / utilisateur laisse 47 bits pour l'espace d'adressage du noyau. La moitié au plus de la mémoire physique s'adresse directement et l'autre moitié permet au noyau de mapper tout ce dont il a besoin. (Linux peut gérer la mémoire physique qui ne peut pas être mappée en totalité en même temps, mais cela introduit une complexité supplémentaire, donc cela ne se fait que sur les plates-formes où cela est nécessaire, comme x86-32 avec PAE et armv7 avec LPAE.)

Il est utile que la mémoire virtuelle soit plus grande que la mémoire physique pour plusieurs raisons:

  • Il permet au noyau de mapper toute la mémoire physique et de laisser de l'espace pour les mappins virtuels.
  • En plus des mappages de mémoire physique, il existe des mappages de swap, de fichiers et de pilotes de périphériques.
  • Il est utile d'avoir de la mémoire non mappée par endroits: pages de garde pour intercepter les débordements de tampon , grandes zones non mappées en raison de l' ASLR , etc.
Gilles 'SO- arrête d'être méchant'
la source
9
La limitation de 46 bits sur la mémoire physique est liée à la carte mémoire Linux : elle inclut un mappage complet de la mémoire physique dans l'espace du noyau, ce qui signifie que la mémoire physique ne peut correspondre qu'à un quart de l'espace d'adressage disponible.
Stephen Kitt
Quelqu'un pourrait-il élaborer sur le commentaire @StephenKitt? Je suis très intéressé à comprendre cela, mais même après avoir lu la référence qu'il a citée, je ne comprends pas;)
gsi-frank
@ gsi-frank Il est commode pour le noyau d'avoir la mémoire physique entière mappée en permanence. Ainsi, dans un espace d'adressage de 2 ^ 48, 2 ^ 47 va aux adresses de l'espace utilisateur, 2 ^ 46 va aux adresses du noyau et 2 ^ 46 est pour l'adressage de la mémoire physique.
Gilles 'SO- arrête d'être mal'
@ gsi-frank Si vous pouvez vous procurer une copie du livre classique " Développer votre propre système d'exploitation 32 bits ", cela explique en détail la raison pour laquelle l'auteur a pris une décision similaire pour son propre système d'exploitation (dans ce cas, divisant l'espace d'adressage virtuel 4GiB du 80386 en un segment de noyau 2GiB qui contient un mappage de RAM physique 1GiB et un segment utilisateur 2GiB). Toute personne intéressée par les composants internes du système d'exploitation devrait probablement la lire - elle fournit une conception complète d'un système d'exploitation assez simple à comprendre mais suffisamment avancé pour être utile.
Jules
Depuis la version 4.13 du noyau, x86-64 (et certaines autres architectures) peuvent être construits avec des tables de pages à cinq niveaux , ce qui augmente l'espace d'adressage sur x86-64 à 52 bits pour la RAM physique et 57 bits pour le virtuel (4 PiB / 128 PiB). Notez que la carte mémoire dans l'espace du noyau introduit des problèmes de sécurité, ce qui est susceptible de changer dans un avenir proche.
Stephen Kitt
9

Je ne sais pas pourquoi, mais je peux penser à sept raisons pour lesquelles il serait utile de prendre en charge deux fois plus d'espace d'adressage que la mémoire physique.

  1. La première est que vous puissiez exécuter des applications qui ont besoin de mémoire supplémentaire - même si cela signifie échanger sur le disque.
  2. Des dispositions de mémoire plus propres pour partitionner l'utilisation de la mémoire. Par exemple, un système d'exploitation peut prendre des adresses de numéro supérieur et laisser des adresses de numéro inférieur pour les applications afin de rendre la séparation plus propre.
  3. La randomisation de la disposition de l'espace d'adressage est un peu plus efficace.
  4. Marquer des pages comme exécutables peut signifier des restes de mémoire.
  5. E / S mappées en mémoire.
  6. L'allocation de mémoire est plus facile: on peut allouer de plus gros morceaux à la fois.
  7. Fragmentation de la mémoire réduite
lungj
la source
1
Merci! 1) est tellement évident et basique que je me sens gêné pour la question;)
gsi-frank
2
(3) est également très important. Vous voulez vraiment un espace d'adressage virtuel dont les ordres de grandeur sont supérieurs à la quantité de mémoire que vous allouerez afin que les suppositions aléatoires entraînent presque sûrement des pièges.
R ..
6

Ce sont des limitations matérielles. Le matériel x86_64 / amd64 actuel autorise des adresses physiques 48 bits et différentes tailles (cela dépend de l'implémentation - par exemple, mon poste de travail ne prend en charge que 36 bits). Le noyau Linux divise l'espace d'adressage virtuel en deux (en utilisant la moitié pour le noyau, la moitié pour l'espace utilisateur, tout comme il le fait sur x86).

Vous obtenez donc:

2⁴⁸ octets ÷ 2 = 2⁴⁷ octets = 128 TiB

La taille de l'adresse physique est souvent plus petite car elle est en fait physique. Il prend des broches / pads, des transistors, des connexions, etc., sur / dans le CPU et trace des lignes sur la carte. Probablement la même chose dans les chipsets. Cela n'a aucun sens de prendre en charge une quantité de RAM qui est inconcevable sur la durée de vie de conception du cœur du processeur ou du socket - tout cela coûte de l'argent. (Même avec 32 emplacements DIMM et des modules DIMM de 64 Go dans chacun, vous n'êtes toujours qu'à 2 To. Même si la capacité DIMM double chaque année, nous sommes à 5 ans de 64 To.

Comme Peter Cordes le fait remarquer, les gens attachent désormais un stockage non volatile tel que 3D XPoint au bus mémoire, ce qui permet de manquer d'espace d'adressage. Les nouveaux processeurs ont étendu l'espace d'adressage physique à 48 bits; il est possible que le wiki Debian n'ait tout simplement pas été mis à jour.

derobert
la source
Le stockage non volatile connecté directement au bus de mémoire (par exemple 3D XPoint) est en train de devenir une chose, et cela pourrait considérablement augmenter la demande d'espace d'adressage physique dans les prochaines années (car il est plus dense que la DRAM, et il est utile d'en avoir des cargaisons complètes) dans plus de cas qu'il n'est utile d'avoir des cargaisons de RAM). Voir zdnet.com/article/the-non-volatile-memory-revolution pour un article pas très technique (ou google pour de meilleures choses). Intel Skylake le prend en charge avec ses instructions clflushet clflushopt.
Peter Cordes
1
Vous pouvez déjà acheter des systèmes avec jusqu'à 12 To de RAM dans 96 emplacements ( le système HPC à quatre sockets de Tyan par exemple), donc 64 To pourraient être dans moins de cinq ans. Et certaines personnes les achètent et les équipent avec autant de RAM ...
Stephen Kitt
@StephenKitt hmm, c'est OK car la capacité DIMM prend plus de 3 ans pour doubler 😁
derobert
Il s'avère que vous pouvez actuellement acheter des systèmes avec 64 To de RAM .
Stephen Kitt