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?
debian
linux-kernel
virtual-memory
gsi-frank
la source
la source
Réponses:
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:
la source
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.
la source
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.
la source
clflush
etclflushopt
.